繁体   English   中英

QTreeView 的 Qt 样式表

[英]Qt StyleSheet for a QTreeView

我目前面临有关 Qt 和 QTreeView 样式表的问题。 我只是希望树中选择的当前项目以粗体显示。 之前做过研究,很多论坛给出的解决方案是:

myView->setStyleSheet("QTreeView::item:selected {font: bold;}");

但这对我不起作用。 我试过QTreeView {font: bold;}它适用于(对于每个项目)和QTreeView::item:selected {background-color:red;}适用。 为什么字体对所选项目不起作用? 谢谢 !

很老的问题,但也许有人会发现它很有用。 我在使用 Qt 5.3 时遇到了同样的问题。

我在qt-center上发现了一些无法通过样式表完成的信息。

有没有办法更改 QListWidget 中所选项目的字体粗细(或最小字体大小)? 不,因为这样的字体样式选项适用于 QWidget,所以您可以将字体(或其他类似字体大小)样式选项应用于整个 QWidget(在本例中为 QListWidget),而不是应用于派生 QWidget 的特殊行为,即 QListWidget 的选择项.

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

变通解决方案:

但是我找到了一些使用 QStyledItemDelegate 的解决方法。 基本上你必须子类化 QTreeView,然后子类化 QStyledItemDelegate。 也许它可以在没有子类化 QTreeView 的情况下工作,但是你必须以某种方式捕捉一些带有选中和取消选中项目的信号,并调用 setItemDelegateForRow 和 setItemDelegateForColumn (它应该只改变相交的单元格)

以这种方式重新实现 QStyledItemDelegate::paint :

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 并捕获 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));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM