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

时间:2009-12-06 23:05:40

标签: c++ user-interface qt qt4

我正在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 个答案:

答案 0 :(得分:6)

我会创建一个基于hbox的自定义委托,您可以将所有图片放入其中。请查看delegates中关于Qt Documentationmodel view programming