【问题标题】:Is there a way to display icons in QListView without text?有没有办法在没有文本的情况下在 QListView 中显示图标?
【发布时间】:2010-04-08 04:12:31
【问题描述】:

使用 QListView 和 QStandardItemModel,是否可以在列表视图中显示图标而不显示相关文本? QStandardItem 是这样定义的:

QStandardItem ( const QIcon & icon, const QString & text ) 

所以它似乎需要某种文本字符串 - 我只希望显示图标。如果我使用以下代码,我会按要求获得图标,但我也会在它们下方获得一个空白文本元素。我不想要这个。

ImageListView->setViewMode( QListView::IconMode );
{
     QStandardItemModel *iStandardModel = new QStandardItemModel(this);
     QStandardItem* item1 = new QStandardItem(QIcon("images/shield-280x280.png"),"");
     QStandardItem* item2 = new QStandardItem(QIcon("images/shield-280x280.png"),"");

     iStandardModel->appendRow(item1);
     iStandardModel->appendRow(item2);
     ImageListView->setIconSize(QSize(100,100));
     ImageListView->setUniformItemSizes(true);
     ImageListView->setDragDropMode(QAbstractItemView::DropOnly);
     ImageListView->setModel(iStandardModel);
}

如果我在构建自定义模型时遇到麻烦,我可以解决这个问题吗?

【问题讨论】:

    标签: c++ qt qlistview


    【解决方案1】:

    为了扩展已接受的答案,这是最简单的委托,它可以选择隐藏项目的文本(显示角色),但在其他方面就像默认委托一样。这适用于任何QAbstractItemView 子类(和QComboBox)和任何QAbstractItemModel 子类。如果宁愿为其他视图(或任何原因)保持显示角色非空,这是一个更好的解决方案。

    class ItemDelegate : public QStyledItemDelegate
    {
      public:
        using QStyledItemDelegate::QStyledItemDelegate;
    
        // simple public member to toggle the display role (create getter/setter if you prefer)
        bool displayRoleEnabled = false;
    
      protected:
        void initStyleOption(QStyleOptionViewItem *o, const QModelIndex &idx) const override
        {
          QStyledItemDelegate::initStyleOption(o, idx);
          // to hide the display role all we need to do is remove the HasDisplay feature
          if (!displayRoleEnabled)
            o->features &= ~QStyleOptionViewItem::HasDisplay;
        }
    };
    

    【讨论】:

    • 我最近得到了很多老问题的死灵答案。我当然感谢你花时间改进事情,即使它们已经过时了。
    • @ChrisK 是的,很抱歉“死灵答案”(这是一件事吗?:),只是这个问题在谷歌搜索结果中很早就出现了,所以我想我可能会帮助下一个人。感谢您的 +1!
    【解决方案2】:

    是的,你可以做到。

    首先您创建一个与列表视图关联的委托。然后,

    在将元素插入列表视图时,使用 set-data 函数插入图标,并在委托的绘制事件中处理绘图图标。我希望它清楚。

    【讨论】:

    • 我同意代码会很好:自定义委托往往会给人们带来勇气。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2019-12-30
    • 1970-01-01
    • 2016-03-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多