使用QListView和QStandardItemModel,是否可以在列表视图中显示图标而不显示相关文本?QStandardItem定义如下:
QStandardItem ( const QIcon & icon, const QString & text )
Run Code Online (Sandbox Code Playgroud)
所以它似乎需要某种文本字符串 - 我只想显示图标.如果我使用以下代码,我会按要求获取图标,但我也会在其下方获得一个空白文本元素.我不想要这个.
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);
}
Run Code Online (Sandbox Code Playgroud)
如果我遇到构建自定义模型的麻烦,我可以解决此问题吗?
为了扩展已接受的答案,这里是最简单的委托,它可以选择隐藏项目的文本(显示角色),但在其他方面就像默认委托一样。这适用于任何子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;
}
};
Run Code Online (Sandbox Code Playgroud)
是的,你可以做到。
首先,您创建一个与列表视图关联的委托。然后,
将元素插入列表视图时,使用 set-data 函数插入图标,并在委托的绘制事件中处理绘图图标。我希望它清楚。