有没有办法在QListView中显示没有文字的图标?

时间:2010-04-08 04:12:31

标签: c++ qt qlistview

使用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);
}

如果我遇到构建自定义模型的麻烦,我可以解决此问题吗?

3 个答案:

答案 0 :(得分:3)

是的,你可以做到。

首先创建一个与list-view关联的委托。然后,

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

答案 1 :(得分:2)

要扩展接受的答案,这是最简单的委托,可以选择隐藏项目的文本(显示角色),但其行为类似于默认委托。这适用于任何QAbstractItemView子类(和QComboBox)以及任何QAbstractItemModel子类。如果希望其他角色的显示角色不为null(或其他原因),这是一个更好的解决方案。

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;
    }
};

答案 2 :(得分:0)

How to show icons without text in QListWidget?

在上面的文章中,您可以使用NULL摆脱空白空间