如何在我的主视图中设置样式:
self.view.setStyleSheet("""
QTreeView::item {
margin: 2px;
}
""")
这将为整个QTreeView设置样式。但我想把树上的某些项目加粗。当我创建分支时(使用[the parent widget].appendRow("the name of the item")
),有没有一种方法可以“标记”或隔离特定的项,以便可以用相同的方式设置样式?我认为答案与“AccessibleName”或“ObjectName”属性有关,但我在查找文档时遇到了困难。在
更新:这是我目前所掌握的:
^{pr2}$更新2:好的,我修改了我的Branch类,这样如果将'bold'传递给它,它将使分支变为粗体(理论上)。。。在
class Branch(QStandardItem):
def __init__(self, label, uri = None, tag = None):
QStandardItem.__init__(self, label)
self.uri = uri
if tag == 'bold':
self.setData(self.createBoldFont(), Qt.FontRole)
def createBoldFont(self):
if self.font: return self.font
self.font = QFont()
self.font.setWeight(QFont.Bold)
return self.font
。。。但是当代码运行时,似乎什么也没有发生。我还没有得到什么?在
在模型的
data()
方法中,可以添加代码来根据项的内容设置字体。例如,如果你想在一个特定的行中加粗所有的内容您只需要一种方法在给定分支的索引时检索它的名称。这取决于树模型的实现。在
Qt的模型视图架构允许数据描述正在执行的different roles。例如,有一个角色用于编辑数据、显示数据等。您对字体角色(即
Qt::FontRole
)感兴趣,因为font有一个weight枚举,粗体是一个值。在在构建分支时,首先需要确定哪些项应该加粗。我假设你有这样一种方法,可以确定他们是否应该加粗:
现在只需设置字体的权重并使用其setData方法设置项的字体角色:
^{pr2}$但是等等。。。您已经有了qStandardItem的子类,因此可以使用它:
您将不得不修复
should_be_bolded
和bold_myself
方法,并相应地进行清理,但希望您能理解要点。在Stephen pointed out,您也可以将其中一个
QAbstractItemModel
子类化,就像您使用的QStandardItemModel
,并返回一个特定的Qt.FontRole
。他的方法使这种知识隐含在模型中。决定知识最应该属于哪里,并把它放在最合适的地方,不管是在项目、树创建算法、模型,甚至是视图模型中。在相关问题 更多 >
编程相关推荐