我正在开发一个带有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
然而,这不是我想要的解决方案。这仅设置当前行的颜色。我想要在播放另一个颜色之后保持这种颜色。新颜色的重点在于更容易区分播放曲目和未播放曲目。
更新: 好。让我重新拟定。我看到了回答的问题。它的解决方案对我不起作用。我不想改变焦点项目的颜色。我希望它是永久性的。此外,如果用户点击表格中的一行并不意味着它已被播放(但它是焦点)。我看到了伪状态,找不到合适的状态(我可能需要一个自定义的,有这样的吗?)。
答案 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
}