kas*_*360 5 c++ icons qt 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);
Run Code Online (Sandbox Code Playgroud)
"serendibMsgTableModel"是一个QSqlQueryModel和"serendibMsgProxyModel"是自定义的QSortFilterProxyModel."serendibMsgView"是QTableView我需要在"数据类型"列中显示的图标.
希望这有助于你的答案.
我看到您已经选择了一个答案,但是由于您正在学习 Qt,我将添加一些内容。
看看优秀的 Qt 文档,我建议您在模型中覆盖它:
QVariant QSqlTableModel::data (
const QModelIndex & index,
int role = Qt::DisplayRole ) const [virtual]
Run Code Online (Sandbox Code Playgroud)
有多种角色(int role = Qt::DisplayRole):
枚举 Qt::ItemDataRole:模型中的每个项目都有一组与之关联的数据元素,每个元素都有自己的角色。视图使用角色来向模型指示它需要哪种类型的数据。自定义模型应该返回这些类型的数据。
Qt::DecorationRole:以图标形式呈现为装饰的数据。(QColor、QIcon 或 Qpixmap)
因此,您需要做的是在 DisplayRole 的 data() 函数中返回 QIcon 或 QPixmap。
另一种可能更合适的方法是使用委托:例如ColorListEditor
将项目的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);
}
Run Code Online (Sandbox Code Playgroud)
这样的事情应该有效.在setModel之前设置值.
我没有测试过,但我认为你应该从中得到这个想法.
| 归档时间: |
|
| 查看次数: |
11896 次 |
| 最近记录: |