2011-04-04 79 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