c – QTabBar下的Widget,带有不需要的帧

前端之家收集整理的这篇文章主要介绍了c – 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 }") ;

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

如果我说:

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

然后我几乎回到了我开始的地方:

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

ApplicationTabWidget -> setStyleSheet ("QTabWidget::pane { "
"   margin: 0px,0px;"
" border: 1px solid darkgray;"
" border-top: 0px;"
      "}") ;

然后我再次为自己的痛苦而嘲笑:

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

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

解决方法

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

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

我不知道你是如何设计代码的,但是为了尝试我的建议,你的代码应该围绕QScrollArea中的widget而不是QScrollArea本身设计.

猜你在找的C&C++相关文章