2011-04-04 82 views
4

我有一個QTableView顯示數據庫表的行。在這個表格中,我有一個名爲數據類型的列,每個類型都有圖標圖像。我如何在每種數據類型前添加這些圖標?帶有圖標的QTableView行

這是我的代碼的一部分,請求justanothercoder

QString msgQueryString = "select MESSAGE_ID, DATA_TYPE from SER_MESSAGES where MESSAGE_ID > 500 "; 
serendibMsgTableModel->setQuery(msgQueryString, *database); 
serendibMsgTableModel->setHeaderData(0, Qt::Horizontal, tr("Message ID")); 
serendibMsgTableModel->setHeaderData(1, Qt::Horizontal, tr("Data Type")); 

serendibMsgProxyModel->setSourceModel(serendibMsgTableModel); 
serendibMsgView->setModel(serendibMsgProxyModel); 

「serendibMsgTableModel」 是QSqlQueryModel和 「serendibMsgProxyModel」 是定製QSortFilterProxyModel。 「serendibMsgView」是QTableView我需要在數據類型列中顯示圖標。

希望這有助於您的答案。

回答

4

將你項目的DecorationRole設置爲你想要的QPixmap,它應該可以工作。

編輯:

我想圖標取決於數據類型列中的值。

int rowCount = serendibMsgTableModel->rowCount(); 

for(int row = 0; row < rowCount; row++) 
{ 
    QModelIndex index = serendibMsgTableModel->index(row, 1); 
    QVariant value = serendibMsgTableModel->data(index); 
    static QPixmap s_invalidIcon(PATH_TO_INVALID_ICON); 
    static QPixmap s_type1Icon(PATH_TO_TYPE1_ICON); 
    static QPixmap s_type2Icon(PATH_TO_TYPE2_ICON); 

    QPixmap icon(s_invalidIcon); 

    if(value.toString() == "type1") 
    { 
     icon = s_type1Icon; 
    } 
    else if(value.toString() == "type2") 
    { 
     icon = s_type2Icon; 
    } 
    serendibMsgTableModel->setData(index, icon, Qt::DecorationRole); 
} 

這樣的事情應該工作。 設置setModel之前的值。

我還沒有測試過,但我認爲你應該從中得到這個想法。

+0

感謝justanothercoder。但是我需要更詳細的描述,因爲我對Qt完全陌生。我在開發這個應用程序時正在學習Qt。 – kasper360 2011-04-04 06:55:00

+0

我有點不知道從哪裏開始,你需要添加更多的描述你做了什麼。在問題中添加一些源代碼可能會很好。 – 0xbaadf00d 2011-04-04 07:23:18

+0

我修改了原來的問題並添加了代碼片段。 – kasper360 2011-04-04 09:32:00

3

我看到你已經選擇了一個答案,但是因爲你正在學習Qt,我會添加一些東西。

考慮看看優秀的Qt文檔,我建議你在你的模型覆蓋此:

QVariant QSqlTableModel::data ( 
      const QModelIndex & index, 
      int role = Qt::DisplayRole) const   [virtual] 

有各種角色(INT角色= Qt的:: DisplayRole):

枚舉Qt :: ItemDataRole: 模型中的每個項目都有一組與其關聯的數據元素 ,每個 都有其自己的角色。該視圖使用角色 向模型 指示它需要哪種類型的數據。自定義 型號應返回這些 類型中的數據。

Qt的:: DecorationRole:數據被 呈現爲形式的圖象的一個 裝飾。 (QColor,QIcon或Qpixmap)

因此,您需要做的是在DisplayRole的data()函數中返回QIcon或QPixmap。

,這可能是更合適的另一種方法是利用代表:例如ColorListEditor

+0

非常感謝您的答案Derick。事實上,我有一種感覺,我可以使用代表來完成這個任務,我也一直在嘗試一些例子。感謝你的例子。 – kasper360 2011-04-05 03:57:29