我有一个简单的QSplitter
,里面有一些小部件:
...
actions_splitter = QSplitter(
Qt.Horizontal,
frameShape=QFrame.StyledPanel,
frameShadow=QFrame.Plain
)
actions_splitter.addWidget(self.systems)
actions_splitter.addWidget(self.events)
actions_splitter.addWidget(self.compass_widget)
actions_splitter.setChildrenCollapsible(False)
...
由此产生的拆分器功能非常好,因为我可以将鼠标悬停在它们的位置上,看到光标的变化,然后拖动它们并更改相邻小部件的大小
问题是句柄本身,QSplitterHandles
绝对拒绝对其进行任何视觉修改
我尝试过样式表:
handle = actions_splitter.handle(0)
handle.setStyleSheet("{background-color: red}")
我尝试过向布局中添加小部件:
handle = actions_splitter.handle(0)
layout = QHBoxLayout()
widget = QPushButton("HANDLE")
layout.addWidget(widget)
handle.setLayout(layout)
绝对没有做任何事情来改变这些句柄的外观。我唯一能改变的“视觉”东西是它们的宽度,这是通过QSplitter.setHandleWidth()
有人请指出我在这里错过的痛苦、愚蠢、明显的东西,这样我才能继续我的生活
前提
qspliterHandle是少数几个非常特定的小部件之一,这些小部件看起来不像遵循一般的QWidget“规则”;原因很简单:它的目标通常仅限于其预期用途,即qspliterchild
然后,你必须考虑到,虽然漂亮的“自由”,样式表语法遵循基本但重要的规则,它取决于所使用的底层QSLUTE,当子控件非常依赖于它的父时,它的行为可能会发生变化。p>
首先,在您的方法中有一个概念上的问题:样式表语法是错误的,因为您试图在不指定选择器的情况下使用类似选择器的语法(使用{braces})。使用这样的语法,样式表无论如何都不会被应用,即使是使用更多的“标准”小部件
但这还不够。QSplitter ^{} 文档解释了一个要点(重点是我的):
即使您的语法是正确的,但由于您试图将样式表应用于第一个(隐藏的)句柄,因此它也不会起作用
因此,理论上,正确的语法应该是:
更好的是:
或者,对于所有句柄:
另一方面,由于qspliterHandle是一个非常特殊的小部件,因此根据当前应用的QStyle,即使使用了正确的语法,其颜色属性也会以不同的方式应用。请记住,样式表将覆盖当前QStyle,这意味着QStyles声明绘制规则,并根据这些规则应用最终样式表。
例如,“windows”样式使用样式表的背景色规则绘制句柄的实际背景,而fusion样式仅使用背景色绘制拆分器的“点”
与其他复杂的小部件(如QComboBox或qabstractemview)一样,您需要为子控件使用特定的selectors,如QSplitter stylesheet documentation中明确说明的那样;使用选择器可以确保颜色规则作为一个整体应用于控制柄,而不管使用的样式是什么:
相关问题 更多 >
编程相关推荐