我对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;"
"}") ;
然后我为自己的痛苦而被 mock :
更新2 如果我忘记了
setStyleSheet
而只是打开documentMode
,这是我得到的:请有人告诉我,我很愚蠢,所有这些都有一个非常简单的解决方案。
最佳答案
如果我假设这不是正确的,那么您说的“QScrollArea的内容会根据所选选项卡而改变”,并且您的意思是滚动区域内的小部件的内容会改变,那么您可以尝试以下操作:
根据需要在QTabWidget中创建尽可能多的QScrollArea对象,但是只有一个(例如QTextEdit)会在每个滚动区域中显示,并且在更改选项卡时,内容会发生变化(旧选项卡的QScrollArea和setWidget中的takeWidget() ()在新标签的QScrollArea上)
我不知道您是如何设计代码的,但是要尝试我的建议,您的代码应该围绕QScrollArea内的小部件而不是QScrollArea本身进行设计。