如何更改QTreeView中特定分支的颜色?

2024-05-23 14:44:56 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在我的主视图中设置样式:

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

。。。但是当代码运行时,似乎什么也没有发生。我还没有得到什么?在


Tags: theselfnonebranchinitdef分支样式
2条回答

在模型的data()方法中,可以添加代码来根据项的内容设置字体。例如,如果你想在一个特定的行中加粗所有的内容

def data(self, index, role):

    if role == QtCore.Qt.FontRole:
       if index.row() == 1:
           boldFont = QtGui.QFont()
           boldFont.setBold(True)
           return boldFont

您只需要一种方法在给定分支的索引时检索它的名称。这取决于树模型的实现。在

Qt/VIEW tutorial有一个很好的例子,虽然它是C++的。请看第2.2节(用角色扩展只读示例)。在

Qt的模型视图架构允许数据描述正在执行的different roles。例如,有一个角色用于编辑数据、显示数据等。您对字体角色(即Qt::FontRole)感兴趣,因为font有一个weight枚举,粗体是一个值。在

在构建分支时,首先需要确定哪些项应该加粗。我假设你有这样一种方法,可以确定他们是否应该加粗:

def should_be_bolded(self, item):
    return 1 # your condition checks

现在只需设置字体的权重并使用其setData方法设置项的字体角色:

^{pr2}$

但是等等。。。您已经有了qStandardItem的子类,因此可以使用它:

class Branch(QStandardItem):
    """Branch element"""
    def __init__(self, label, uri = None, tag = None):
        QStandardItem.__init__(self, label)
        self.uri = uri
        if self.should_be_bolded():
            self.bold_myself()

您将不得不修复should_be_boldedbold_myself方法,并相应地进行清理,但希望您能理解要点。在

Stephen pointed out,您也可以将其中一个QAbstractItemModel子类化,就像您使用的QStandardItemModel,并返回一个特定的Qt.FontRole。他的方法使这种知识隐含在模型中。决定知识最应该属于哪里,并把它放在最合适的地方,不管是在项目、树创建算法、模型,甚至是视图模型中。在

相关问题 更多 >