在QTreeView中设置粗体行

tay*_*ron 2 qt pyqt stylesheet qtreeview

我在pyqt应用程序中有一个QTreeView的自定义子类.我试图让用户能够突出显示和"低亮"(缺少一个更好的术语)行.突出显示的行应具有粗体文本和(可选)不同的背景颜色.有任何想法吗?
我正在考虑将StyleSheets作为一种选择,但到目前为止还无法让它发挥作用.如果我设置QTreeView的样式表:

self.setStyleSheet("QTreeView::item:selected {border: 1px solid #567dbc;}")
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何手动启用"状态",只保留特定状态下的所需行.如果我尝试设置单个项目的样式表:

#modelIndex is a valid QModelIndex
modelIndex.internalPointer().setStyleSheet()
Run Code Online (Sandbox Code Playgroud)

我得到了一个段错误.
我不相信样式表是可行的方式,我对所有想法持开放态度.谢谢!

ser*_*nko 7

根据您的说法,最简单的解决方案是为您的树视图定义自定义项目委托,并在需要时将项目字体粗细设置为粗体.请检查下面的示例是否适合您,它应该创建一个带有自定义项委托的树视图,它将更改项目的字体样式.

import sys
from PyQt4 import QtGui, QtCore

class BoldDelegate(QtGui.QStyledItemDelegate):
    def paint(self, painter, option, index):
        # decide here if item should be bold and set font weight to bold if needed 
        option.font.setWeight(QtGui.QFont.Bold)
        QtGui.QStyledItemDelegate.paint(self, painter, option, index)


class MainForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)

        model = QtGui.QStandardItemModel()

        for k in range(0, 4):
            parentItem = model.invisibleRootItem()
            for i in range(0, 4):
                item = QtGui.QStandardItem(QtCore.QString("item %0 %1").arg(k).arg(i))
                parentItem.appendRow(item)
                parentItem = item

        self.view = QtGui.QTreeView()
        self.view.setModel(model)
        self.view.setItemDelegate(BoldDelegate(self))

        self.setCentralWidget(self.view)

def main():
    app = QtGui.QApplication(sys.argv)
    form = MainForm()
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,问候