【问题标题】:QTableView change row color based on a valueQTableView 根据值更改行颜色
【发布时间】:2012-01-19 01:07:20
【问题描述】:

我有一个QTableView,我用我自己的模型从QAbstractTableModel 子类化了它。当行中的一个字段具有特定值时,我希望能够将行颜色更改为红色。我看到很多例子,答案是调用模型setData 并使用Qt::BackgroundRole 更改背景颜色。由于我将AbstractTableModel 子类化,因此我重新实现了setDatadata,因此调用模型setData 对背景颜色角色没有任何作用,因为我只处理角色为Qt::DisplayRole 的数据。

我想我的第一个问题是:有没有更简单的方法来改变整个角色的颜色?如果没有,我猜我必须在setDatadata 中实现该部分来处理BackgroundRole,如果有人有如何做到这一点的例子,我不知道该怎么做很多...

【问题讨论】:

    标签: c++ qt qtableview qabstracttablemodel


    【解决方案1】:

    这比我想象的要容易...在我的数据方法中,我添加了对

    的检查
    if (role == Qt::BackgroundColorRole) 
    

    在那个 if 块中。我检查进行值比较以查看是否是我必须更改颜色的行,如果是,我返回:

    return QVariant(QColor(Qt::red));
    

    【讨论】:

      【解决方案2】:

      更好的答案是使用view 提供的delegate 来完成此任务,而根本不要触摸model。为什么模型应该知道您希望视图是什么颜色?如果您希望多个视图的行为不同,会发生什么?等等。

      您可以使用setColumnDelegatesetRowDelegate 或许多其他机制。查看这些函数以获得完整答案。

      【讨论】:

      • (绝对正确) uv 建议正确的事情!最终会产生大量技术债务的变通办法很常见。
      猜你喜欢
      • 2019-02-06
      • 2017-07-10
      • 2015-09-02
      • 2019-07-26
      • 2022-01-12
      • 2018-05-12
      • 1970-01-01
      相关资源
      最近更新 更多