C++ QTreeView的Qt样式表

C++ QTreeView的Qt样式表,c++,qt,model-view-controller,qtreeview,qtstylesheets,C++,Qt,Model View Controller,Qtreeview,Qtstylesheets,我目前面临一个关于Qt和QTreeView样式表的问题。 我只是希望树中选择的当前项以粗体书写。 我以前做过研究,在许多论坛上给出的解决方案有: myView->setStyleSheet("QTreeView::item:selected {font: bold;}"); 但这对我不起作用。我尝试了QTreeView{font:bold;}这两种方法(对于每个项目)都有效,并且QTreeView::item:selected{background color:red;}也有效。为什么字

我目前面临一个关于Qt和QTreeView样式表的问题。 我只是希望树中选择的当前项以粗体书写。 我以前做过研究,在许多论坛上给出的解决方案有:

myView->setStyleSheet("QTreeView::item:selected {font: bold;}");
但这对我不起作用。我尝试了
QTreeView{font:bold;}
这两种方法(对于每个项目)都有效,并且
QTreeView::item:selected{background color:red;}
也有效。为什么字体不适用于所选项目?
谢谢

这是一个很老的问题,但也许有人会发现它很有用。 我在使用Qt5.3时也遇到同样的问题

我发现一些信息,它不能做的样式表

有没有办法更改字体的字体大小(或最小字体大小) QListWidget中的选定项?否,因此字体样式选项适用 到QWidgets,以便应用字体(或其他类似字体大小) 整个QWidget(本例中为QListWidget)的样式选项,而不是 导出QWidget的特殊行为,即QListWidget的选择 项目

我认为它也适用于QTreeView,因为我无法改变它的样式。 我可以更改边框、颜色、背景色,但不能更改字体。 首先,我认为我必须重新实现paintEvent函数,因为我正在重新实现QTreeView。这也不管用

解决方案:

但是我发现了一些使用QStyledItemDelegate的解决方法。 基本上,您必须子类QTreeView,然后子类QStyledItemDelegate。 也许它不需要对QTreeView进行子类化就可以工作,但您必须以某种方式捕获选中和取消选中项的某些信号,并调用setItemDelegateForRow和setItemDelegateForColumn(它应该只更改相交单元格)

重新实现QStyledItemDelegate::以这种方式绘制:

QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyleOptionViewItemV4 editedOpt = option;
    editedOpt.font = QFont("Arial", 23, 500);
    initStyleOption( &editedOpt, index );
    QStyledItemDelegate::paint(painter, editedOpt, index);
}
重新实现QTreeView::selectionChanged(或普通QTreeView和catch QItemSelectionModel::selectionChanged):

void CustomTreeView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
    foreach(const QModelIndex &index, selected.indexes()) {
        setItemDelegateForRow(index.row(), new CustomDelegate(this));
        setItemDelegateForColumn(index.column(), new CustomDelegate(this));
    }
    foreach(const QModelIndex &index, deselected.indexes()) {
        setItemDelegateForRow(index.row(), new QStyledItemDelegate(this));
        setItemDelegateForColumn(index.column(), new QStyledItemDelegate(this));
    }
}