2009-12-06 62 views
2

我正在QtCreator中编写一个带有QT4.5的小型gui应用程序。在QTableView的单个单元格中显示多个图标

该应用程序的主屏幕包含一个带两列的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; 
} 

这工作,但对于一些小问题,这应该是透明的背景是完全随机噪声,即使有透明色不解决它填补这一。

其次,这看起来效率不高,我每次调用这个函数都会生成一个新的图像,我是不是应该只将图标绘制到单元格的窗口小部件上?

什么是在一个单元格中显示多个图标的最佳方式?

回答

6

我会创建一个基于hbox的自定义代理,您可以在其中放置所有图片。在Qt Documentationmodel view programming看看delegates

+0

谢谢你的工作。现在唯一的问题是如何正确选择新列。我可以选择背景颜色来显示,但它看起来很平坦,其他列以三维圆角显示。如果我没有运气,我会补充问另一个问题 – iain 2009-12-07 21:41:53

相关问题