首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据初始列的值更改表格颜色

根据初始列的值更改表格颜色
EN

Stack Overflow用户
提问于 2012-06-12 21:10:23
回答 1查看 113关注 0票数 1

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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;
}

但似乎发生的情况是,第一部分先完成,然后列的值是“通过”或“失败”,而不是0,1,因此颜色不会改变。

那么我到底该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-12 22:09:24

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

代码语言:javascript
代码运行次数:0
运行
复制
inline QVariant QModelIndex::data(int arole) const
{ return m ? m->data(*this, arole) : QVariant(); }

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

这意味着您的呼叫

代码语言:javascript
代码运行次数:0
运行
复制
index.sibling(index.row(), 0).data(); 

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

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

代码语言:javascript
代码运行次数:0
运行
复制
QModelIndex firstColumnIndex = index.sibling( index.row(), 0 );
QVariant pass = QSqlQueryModel::data( firstColumnIndex );

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10997387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档