2009-12-06 59 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

相關問題