QTabBar下的小部件,带有不需要的帧

时间:2011-05-30 21:22:04

标签: c++ qt qt4

我遇到QTabBar / QTabWidget问题。这是我的程序目前的样子,使用QTabBar:

enter image description here

如您所见,QTabBar与其下方的QScrollArea之间存在难看的线。这条线是QScrollArea框架的一部分,我不能简单地将其删除,因为它在其他三个方面都是必需的。我意识到我可以使用QTabWidget,但是我必须为每个选项卡创建一个小部件,这在这里是不可行的:QScrollArea的内容根据所选选项卡而改变,但是只有一个QScrollArea小部件。 (每次创建新选项卡时复制它都会导致问题。)

所以有人知道一种方法:
(i)告诉QScrollArea绘制一个没有顶线的框架;或
(ii)为QTabWidget中的每个标签使用相同的小部件?

更新3 有关其他方法,请参阅下面的答案。

更新1 我已经实施了zvezdi的建议,难看的线已经消失了:

enter image description here

这是一项改进。但这不对。查看滚动条和边框之间的间隙。在右边,它是两个像素而不是一个;在底部,它是三个像素。 QScrollArea边框和mainWidget边框之间的右边间隙是一个像素太大。这是由于QTabWidget的边框风格,我正在试图改变我的理智。如果我说:

MyTabWidget -> setStyleSheet ("QTabWidget::pane { margin: 0px,0px,0px,0px }") ;

然后边缘似乎是正确的,但边界消失了:

enter image description here

如果我说:

MyTabWidget -> setStyleSheet ("QTabWidget::pane { "
  " margin: 0px,0px,0px,0px;"
  " border: 1px solid darkgray;"
  "}") ;
然后我几乎回到了我开始的地方:

enter image description here

如果我尝试用以下方法解决这个问题:

ApplicationTabWidget -> setStyleSheet ("QTabWidget::pane { "
"   margin: 0px,0px,0px,0px;"
" border: 1px solid darkgray;"
" border-top: 0px;"
      "}") ;
然后我再次为自己的痛苦而嘲笑:

enter image description here

更新2 如果我忘记setStyleSheet并且只是打开documentMode,这就是我得到的:

enter image description here

请有人告诉我,我是愚蠢的,并且有一个非常简单的解决方案。

3 个答案:

答案 0 :(得分:2)

除非我误解,如果您通过将QScrollArea设置为frameShape来关闭NoFrame的边框,则标签窗口小部件的边框和底部的框架线仍然是你想要他们。

答案 1 :(得分:2)

你说“QScrollArea的内容会根据所选标签进行更改”,如果我认为这不是真的,你的意思是滚动区域内的小部件内容会发生变化,那么你可以试试这个:

在QTabWidget中生成尽可能多的QScrollArea对象,但只有一个,例如QTextEdit,您将在每个滚动区域显示,以及哪些内容将在标签更改时更改(takeWidget()来自旧标签的新标签的QScrollArea上的QScrollArea& setWidget())

我不知道您是如何设计代码的,但是为了尝试我的建议,您的代码应该围绕QScrollArea中的小部件设计,而不是QScrollArea本身。

答案 2 :(得分:0)

我尝试了另一种方法:使用QTabBar,如第一个屏幕截图所示,然后更改MyScrollArea的样式(显然,回想起来):

MyScrollArea -> setStyleSheet ("QScrollArea {"
  "border: 1px solid #898C95;"
  "border-top: 0px;"
  " }") ;

结果如下:

enter image description here

几乎是对的!有三个问题:
  - 两个滚动条交叉处的小方块缺少其底部边框(但是如果我点击滚动条,或者调整窗口大小,或者主窗口失去焦点,它会被绘制);
  - colur #898C95是硬编码的,因此如果用户更改样式则不正确。但如果我省略border风格,那么整个边框都会涂成白色。有没有办法查询样式的当前边框颜色?
  - 最严重的是,左侧断点小部件的背景颜色不再是白色。

但我觉得我浪费了足够的时间!除非有人能提出别的建议,否则我会坚持使用这个解决方案。