Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用样式表更改特定QTableView行的颜色_C++_Qt - Fatal编程技术网

C++ 使用样式表更改特定QTableView行的颜色

C++ 使用样式表更改特定QTableView行的颜色,c++,qt,C++,Qt,我正在开发一个音乐应用程序,它有一个带有曲目列表的QTableView。当我选择一个并点击play时,我想更改其行的颜色。我知道我可以在模型的data()函数中实现,但是要应用的新颜色必须从存储整个应用程序样式的style.qss文件中取出。我读了一些关于动态属性的书,但不知道如何将它们应用到特定的行。QTablewView的项是否有类? 如果有,我可以这样做: MagicItemClass[played="true"] { background-color: #something color:

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

MagicItemClass[played="true"] {
background-color: #something
color: #something
}
然后使用setProperty()和unpolish()以及polish()函数

另一种不顾一切的尝试是解析style.qss并获取颜色,然后在data()函数中返回它

然而,我真的认为一定有更好的解决办法

你知道有什么“魔法班”吗?或者您对如何实现此功能还有其他想法吗

编辑: 我看到:
然而,这不是我想要的解决方案。这仅设置当前行的颜色。我希望即使在选择播放另一个后,该颜色仍然保持不变。新颜色的全部目的是更容易区分播放的曲目和未播放的曲目

更新:
好啊让我重新表述一下。我看到了被回答的问题。它的解决方案对我不起作用。我不想更改焦点中项目的颜色。我希望它是永久的。另外,如果用户单击表中的某一行,并不意味着该行已被播放(但它处于焦点)。我看到了伪状态,但找不到合适的状态(我可能需要一个自定义状态,是否有类似的情况?)

在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;
   }
   ...
}
我不知道如何为checked编写样式表。。也许是这样的

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

QStyledItemDelegate可能有效。@m.s.我不想只为当前项目设置颜色。新颜色必须应用于已播放曲目的所有行,而另一行保持不变。@Greenflow我应该如何使用QStyledItemDelegate?Qt文档中有一个很好的示例。搜索“星型代表示例”。您的用例比这简单,但应该为您指明正确的方向。QTableView有一个函数void QAbstractItemView::setItemDelegateForRow(int行,QAbstractItemDelegate*delegate)。这应该允许您为各行设置自定义委托。@Greenflow确定。非常感谢您的回复!我会试试看,结果会出来的。我试过了,但没用。我不知道为什么。我在那张表中也有一些复选框,但它们没有改变颜色。我无法编辑您的答案,但我认为它是QTableView::item:选中的