使用StyleSheets更改特定QTableView行的颜色

时间:2015-04-19 07:11:45

标签: c++ qt

我正在开发一个带有QTableView和音轨列表的音乐应用程序。当我选择一个并点击播放时,我想改变它的行颜色。我知道我可以在模型的data()函数中执行它,但是要应用的新颜色必须从style.qss文件中取出,其中存储整个应用程序的样式。我读了一些关于动态属性的内容,但我看不出如何将它们应用于特定的行。是否有QTablewView项目的类? 如果有,我可以做类似的事情:

MagicItemClass[played="true"] {
background-color: #something
color: #something
}

然后使用setProperty()和unpolish()和polish()函数。

另一种绝望的尝试是解析style.qss并获取颜色并将其返回到data()函数中。

但我真的认为必须有更好的解决方案。

你知道任何“MagicItemClass”吗?或者您对如何实现此功能有任何其他想法?

编辑: 我看见: How to set stylesheet for the current item in QTableView
然而,这不是我想要的解决方案。这仅设置当前行的颜色。我想要在播放另一个颜色之后保持这种颜色。新颜色的重点在于更容易区分播放曲目和未播放曲目。

更新: 好。让我重新拟定。我看到了回答的问题。它的解决方案对我不起作用。我不想改变焦点项目的颜色。我希望它是永久性的。此外,如果用户点击表格中的一行并不意味着它已被播放(但它是焦点)。我看到了伪状态,找不到合适的状态(我可能需要一个自定义的,有这样的吗?)。

1 个答案:

答案 0 :(得分:0)

如何在YourModel :: data()函数中设置所需的单元格?

YourModel::data(const QModelIndex &index, int role) {
   if(role==Qt::CheckStateRole)
   {
      if(alreadySelected(index))//check some QVector of selected indexes..
         return Qt::Checked;
      else 
         return Qt::Unchecked;
   }
   ...
}

我不知道如何编写样式表来检查..也许是这样的

QTableView:item:checked {
   background-color: #something
   color: #something
}