悬停时如何更改QTreewidget标题背景

Posted

技术标签:

【中文标题】悬停时如何更改QTreewidget标题背景【英文标题】:how change QTreewidget header background when hover 【发布时间】:2021-01-28 23:40:54 【问题描述】:

我正在使用 QTreeWidget 制作程序,但我不知道如何在悬停时更改其标题背景颜色,但悬停不起作用。这是我的代码。

self.mytreeview.setStyleSheet('''
QHeaderView::section 
    background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
                                      stop:0 #616161, stop: 0.5 #505050,
                                      stop: 0.6 #434343, stop:1 #656565);
    color: white;
    padding-left: 4px;
    border: 1px solid #6c6c6c;

QHeaderView::section:hover 
background-color:blue;
    border: 2px solid red;

QTreeView 
    show-decoration-selected: 1;
    
    outline:0;


QTreeView::item 
    color:#f5f6f7;
    


QTreeView::item:hover 
    background: rgba(80, 120, 242, 100);
    border-top:1px solid #002cf2;
    border-bottom:1px solid #002cf2;
    
    


QTreeView::item:selected 
    background: rgb(80, 120, 242)



''')
self.mytreeview.verticalScrollBar().setStyleSheet(" QScrollBar:vertical\n"
" \n"
"     background-color: #2A2929;\n"
"     width: 15px;\n"
"     margin: 15px 3px 15px 3px;\n"
"     border: 1px transparent #2A2929;\n"
"     border-radius: 4px;\n"
" \n"
"\n"
" QScrollBar::handle:vertical\n"
" \n"
"     background-color: rgb(119, 139, 255);         /* #605F5F; */\n"
"     min-height: 5px;\n"
"     border-radius: 4px;\n"
" \n"
" QScrollBar::handle:vertical:hover\n"
" \n"
"     background-color:rgb(60, 73, 255);         /* #605F5F; */\n"
"     min-height: 5px;\n"
"     border-radius: 4px;\n"
" \n"
"\n"
" QScrollBar::sub-line:vertical\n"
" \n"
"     margin: 3px 0px 3px 0px;\n"
"     border-image: url(:/newPrefix/Simple_PySide_Base-master/icons/sort-up.png);\n"
"     height: 10px;\n"
"     width: 10px;\n"
"     subcontrol-position: top;\n"
"     subcontrol-origin: margin;\n"
" \n"
"\n"
" QScrollBar::add-line:vertical\n"
" \n"
"     margin: 3px 0px 3px 0px;\n"
"     border-image: url(:/newPrefix/Simple_PySide_Base-master/icons/sort-down.png);\n"
"     height: 10px;\n"
"     width: 10px;\n"
"     subcontrol-position: bottom;\n"
"     subcontrol-origin: margin;\n"
" \n"
"\n"
" QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on\n"
" \n"
"\n"
"     border-image:url(:/newPrefix/Simple_PySide_Base-master/icons/sort-up-hover.png);\n"
"     height: 10px;\n"
"     width: 10px;\n"
"     subcontrol-position: top;\n"
"     subcontrol-origin: margin;\n"
" \n"
"\n"
"\n"
" QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on\n"
" \n"
"     border-image: url(:/newPrefix/Simple_PySide_Base-master/icons/sort-down-hover.png);\n"
"     height: 10px;\n"
"     width: 10px;\n"
"     subcontrol-position: bottom;\n"
"     subcontrol-origin: margin;\n"
" \n"
"\n"
" QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical\n"
" \n"
"     background: none;\n"
" \n"
"\n"
"\n"
" QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical\n"
" \n"
"     background: none;\n"
" ")

根据@musicamante,现在我已使用完整的样式表对其进行了编辑。一切正常,唯一的问题是悬停不影响。这可能适用于 Qtabwidget 或 QtabelWidget,但我希望它在 Qtreewidget 中。

【问题讨论】:

我不明白你的问题。您的代码工作正常,因为当标题悬停时边框变为红色,但您没有在 :hover 伪中设置任何背景。你到底有什么问题? 不,实际上我设置了所有内容,甚至是树小部件样式表,我只是将其裁剪为一个小示例。我知道我没有设置背景。但除此之外一切正常,我也更改了标题部分背景。但悬停对我不起作用。我的 pyqt 版本是 5.15.1 。为什么它在我的程序中不起作用?@musicamante @musicamante 你能在答案部分写你的程序吗?我不知道为什么会这样 如果您使用更扩展的样式表,那么您必须向我们展示:如前所述,您的代码按预期工作,如果您没有,可能是因为您在样式表的某些部分做错了什么不提供给我们。我没有编写任何程序,我只是使用您的样式表在 Designer 中的标准 QTableWidget 上对其进行了测试。 谢谢!但我认为它可能适用于 QTabel 小部件,只需检查并确认 QTreeWidget 而不是树视图。我还用整个样式表编辑了我的帖子@musicamante 【参考方案1】:

似乎QHeaderView中:hover伪的强制要求是具有可点击的部分,默认情况下QTreeView的标题没有启用。

那么,解决方法就很简单了:

    self.mytreeview.header().setSectionsClickable(True)

【讨论】:

谢谢你!它工作正常。我只是使用你的评论。而且你忘记在答案部分添加header() ,因为树小部件没有属性setSectionsClickable(True)。我将其标记为正确答案。 抱歉,在复制粘贴中丢失了,现已修复。谢谢

以上是关于悬停时如何更改QTreewidget标题背景的主要内容,如果未能解决你的问题,请参考以下文章

悬停时如何更改导航栏链接上的文本颜色(和背景)? [复制]

在 html 选择中悬停或选择项目时,如何避免更改背景颜色?

如何在 Material ui 数据表中悬停或鼠标悬停时更改表格行背景颜色

如何更改悬停时gridview内可用控件的工具提示的背景颜色

Zurb Foundation 4:如何在悬停时更改顶栏部分的背景颜色?

如何设置QTreeWidget标头颜色并隐藏分割线?