gpt4 book ai didi

c++ - 根据初始列的值更改表格颜色

转载 作者:行者123 更新时间:2023-11-30 04:27:20 25 4
gpt4 key购买 nike

我正在尝试了解如何将数据库中的数据显示到 Qt 表中。我想要做的是将 bool 值的显示值更改为“通过”或“失败”,然后根据此更改行颜色。

我已经为模型创建了一个 QSqlQueryModel 派生类并覆盖了函数:

QVariant TestResultsViewModel::data(const QModelIndex &index, int role) const
{
QVariant value = QSqlQueryModel::data(index, role);

if (value.isValid() && role == Qt::DisplayRole){
switch(index.column()){
case 0:
return value.toBool() ? "PASS" : "FAIL";
}
}

if (role == Qt::TextColorRole){
// Get column 0
QVariant pass = index.sibling(index.row(), 0).data();
if (pass.isValid()){
if (pass.toBool()){
return QVariant::fromValue(QColor(Qt::blue));
}
else{
return QVariant::fromValue(QColor(Qt::red));
}
}
}

return value;
}

但似乎发生的是第一部分先完成,此后列的值为“PASS”或“FAIL”而不是 0、1,因此颜色没有改变。

那么我应该怎么做呢?

最佳答案

QModelIndex::data() 的实现解释了这种行为:

inline QVariant QModelIndex::data(int arole) const
{ return m ? m->data(*this, arole) : QVariant(); }

其中 m 是模型索引的模型。

这意味着你的电话

index.sibling(index.row(), 0).data(); 

最终再次调用 TestResultsViewModel::data(),这意味着您确实得到“通过”或“失败”结果。

为了避免这种情况,您可以执行以下操作:

QModelIndex firstColumnIndex = index.sibling( index.row(), 0 );
QVariant pass = QSqlQueryModel::data( firstColumnIndex );

这将显式调用 QSqlQueryModel::data() 而不是 TestResultsViewModel::data() 并跳过您的代码

关于c++ - 根据初始列的值更改表格颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10997387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com