使用不需要的框架在QTabBar下的Widget
QTabBar / QTabWidget有问题。 这是我的程序在使用QTabBar的时候的样子:
正如你所看到的,QTabBar和它下面的QScrollArea之间有一条难看的线。 这条线是QScrollArea框架的一部分,我不能简单地摆脱它,因为它在其他三面都是必需的。 我意识到我可以使用QTabWidget,但是我必须为每个选项卡创建一个小部件,这在这里不可行:QScrollArea的内容根据选定的选项卡而变化,但只有一个QScrollArea小部件。 (每次创建新选项卡时复制它都会导致它自己的问题。)
那么任何人都可以通过以下任一方式来了解:
(i)告诉QScrollArea绘制一个没有第一行的框架; 要么
(ii)为QTabWidget中的每个选项卡使用相同的小部件?
更新3有关其他方法,请参阅下面的答案。
更新1我已经实施了zvezdi的建议,而不美观的路线已经消失:
这是一个改进。 但这是不对的。 看看滚动条和边框之间的差距。 在右边,它是两个像素而不是一个; 在底部,它是三个像素。 QScrollArea边框和mainWidget边框之间的右侧空白是一个像素太大。 这是由于QTabWidget的边框风格,我正在失去理智的尝试改变。 如果我说:
MyTabWidget -> setStyleSheet ("QTabWidget::pane { margin: 0px,0px,0px,0px }") ;
那么边际似乎是正确的,但边界消失:
如果我说:
MyTabWidget -> setStyleSheet ("QTabWidget::pane { "
" margin: 0px,0px,0px,0px;"
" border: 1px solid darkgray;"
"}") ;
那么我几乎回到我开始的地方:
如果我试图通过以下方式进行补救:
ApplicationTabWidget -> setStyleSheet ("QTabWidget::pane { "
" margin: 0px,0px,0px,0px;"
" border: 1px solid darkgray;"
" border-top: 0px;"
"}") ;
然后我再次为自己的痛苦而嘲笑:
更新2如果我忘记了setStyleSheet
,只是打开documentMode
,这就是我得到的:
请有人告诉我,我很愚蠢,并有一个完美的简单解决方案。
你说“QScrollArea的内容根据选定的选项卡而改变”,如果我认为这不是真的,并且你的意思是滚动区域内部的小部件的内容改变了,那么你可以试试这个:
在您的QTabWidget中创建尽可能多的QScrollArea对象,但只有一个,例如QTextEdit,您将在每个滚动区域中显示,以及哪些内容将在选项卡更改(takeWidget()从旧选项卡的QScrollArea&setWidget ()在新选项卡的QScrollArea上)
我不知道你是如何设计你的代码的,但是为了尝试我的建议,你的代码应该围绕QScrollArea中的部件而不是QScrollArea本身来设计。
除非我误解,如果通过将frameShape
设置为NoFrame
来关闭QScrollArea
的边框,那么选项卡小部件的边框和底部都将保留其所需的框线。
我尝试了另一种方法:使用QTabBar
,如第一个截图所示,然后更改MyScrollArea
的样式(显然,回想起来):
MyScrollArea -> setStyleSheet ("QScrollArea {"
"border: 1px solid #898C95;"
"border-top: 0px;"
" }") ;
这是结果:
几乎正确! 有三个问题:
- 两个滚动条相交处的小方块缺少底部边框(但如果我单击滚动条或调整窗口大小,或主窗口失去焦点,它会被绘制);
- colur #898C95
是硬编码的,所以如果用户改变风格则不会是正确的。 但是如果我忽略border
样式,那么整个边框就会被涂成白色。 有没有办法查询样式的当前边框颜色?
- 最严重的是,左侧的断点部件的背景颜色不再是白色。
但我认为我已经浪费了足够的时间了! 我会坚持这个解决方案,除非有人可以建议其他的东西来尝试。
链接地址: http://www.djcxy.com/p/52899.html