我对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本身进行设计。

09-16 07:10