使用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);
}
如果我遇到构建自定义模型的麻烦,我可以解决此问题吗?
答案 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摆脱空白空间