在 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 的单个单元格中显示多个图标的主要内容,如果未能解决你的问题,请参考以下文章

QTableView,如何改变拖动多个项目的显示

在单个单元格中根据多个条件选择记录

如何在单个单元格中插入多个超链接?

QTableView 中标题单元格中的复选框

如何在mysql中特定列的单个单元格中插入多个整数值

如何在dataTable的单个单元格中添加多个json值