代码之家  ›  专栏  ›  技术社区  ›  iain

在QtableView的单个单元格中显示多个图标

  •  2
  • iain  · 技术社区  · 16 年前

    我正在用qtcreator中的qt4.5编写一个小的GUI应用程序。

    应用程序的主屏幕包含一个有两列的qtreeview,第一列是文本,第二列是一组图标。这些图标表示行中显示的项目的最后几个状态。

    我不知道最好的方法是什么。我目前通过生成模型的 data() 方法。

    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 回复  |  直到 16 年前
        1
  •  6
  •   Marius    16 年前

    我将创建一个基于HBOX的自定义委托,您可以将所有图片放入其中。看一看 delegates Qt Documentation 关于 model view programming .