在 QTableView 的单个单元格中显示多个图标
Posted
技术标签:
【中文标题】在 QTableView 的单个单元格中显示多个图标【英文标题】:Displaying multiple icons in a single cell of a QTableView 【发布时间】:2009-12-06 23:05:40 【问题描述】:我正在 QtCreator 中使用 QT4.5 编写一个小型 gui 应用程序。
应用程序的主屏幕包含一个带有两列的 QTreeView,第一列是文本,第二列是一组图标。这些图标代表该行中显示的项目的最后几个状态。
我不确定最好的方法是什么。我目前已经通过生成模型的data()
方法的QPixmap 来实现这一点。
QVariant MyModel::data(const QModelIndex &index, int role) const
if (role == Qt::DisplayRole || role == Qt::EditRole)
switch(index.column())
case 0:
return item_.at(index.row()).title();
if (role == Qt::DecorationRole)
switch(index.column())
case 1:
return makeImage(item_.add(index.row()).lastStates());
return QVariant();
QVariant MyModel::makeImage(const QList<MyState> &states) const
const int IconSize = 22;
QPixmap image(IconSize * states.size(), IconSize);
QPainter painter(&image);
painter.fillRect(0, 0, IconSize * count, IconSize, Qt::transparent);
for (int i = 0; i < states.size(); ++i)
QIcon * icon = stateIcon(state.at(i));
icon->paint(&painter, IconSize * i, 0, IconSize, IconSize);
return image;
这可行,但是对于一些小问题,应该透明的背景充满了随机噪声,即使用透明颜色填充也不能解决它。
其次,这似乎不是很有效,每次调用它时我都会生成一个新图像,我不应该只是将图标绘制到单元格的小部件上吗?
在一个单元格中显示多个图标的最佳方式是什么?
【问题讨论】:
【参考方案1】:我会创建一个基于 hbox 的自定义委托,您可以在其中放置所有图片。在Qt Documentation 中查看delegates 关于model view programming。
【讨论】:
感谢您的款待。现在唯一的问题是如何正确选择新列。我可以显示选择背景颜色,但它看起来很平坦,因为其他列在 3D 中是四舍五入的。如果我没有运气,我会添加另一个问题以上是关于在 QTableView 的单个单元格中显示多个图标的主要内容,如果未能解决你的问题,请参考以下文章