在我的项目中,有一个QTabWidget有5个标签,使用styleSheet我改变了整个小部件的样式,但有些标签变得很小,因为它们中的文本。如何使个别宽度为一些标签?
正如你所看到的,前3个标签有正常的宽度,但最后2个太小了,不适合文本。样式表:
QTabWidget::pane
{
background-color: rgb(212, 234, 255);
border: 1px solid; /*граница*/
border-color: rgb(255, 255, 255);
}
QTabWidget::tab-bar
{
left: 10px; /*перемещение кнопок вкладок*/
width: 650px;
}
QTabBar::tab
{
font: 75 11pt "MS Shell Dlg 2";
font-weight: bold;
background-color: qlineargradient(spread:pad, x1:0.502, y1:1, x2:0.493, y2:0,
stop:0 rgba(53, 92, 88, 255),
stop:1 rgba(45, 143, 132, 255));
border-top-left-radius: 4px;
border-top-right-radius: 4px;
min-width: 5px;
padding: 6px;
border: 1px solid;
border-color: rgb(255, 255, 255);
}
QTabBar::tab:selected,
QTabBar::tab:hover
{
background-color: rgb(63, 171, 160);
}
QTabBar::tab:!selected
{
margin-top: 5px
}
QTabBar::tab:selected
{
margin-left: 4px;
margin-right: 4px;
background-color: qlineargradient(spread:pad, x1:0.502, y1:1, x2:0.493, y2:0,
stop:0 rgba(53, 92, 88, 255),
stop:1 rgb(58, 207, 192));
}
附加信息:我不改变。ui或。py文件的用户界面;使用QtDesigner创建UI I;所有的逻辑代码是在单独的文件,在那里我导入UI文件.
2条答案
按热度按时间holgip5t1#
tl;dr
将字体属性移动到主
QTabBar
类型选择器:说明
该问题是由于字体应用于
::tab
子控件所致。虽然这可能是有道理的,但它产生了一个概念问题:QTabBar使用 widget 字体来提供正确的
tabSizeHint()
,QSS规则也基于此,即使::tab
子控件具有不同的字体集。我同意实现并不完美,但由于子控件也可以有伪状态(例如,
:hover
或:selected
),结果是子控件的字体度量不考虑布局。简单地说:子控件选择器不能改变子控件大小,即使其字体度量改变也不行。请注意,这一点非常重要:状态变化应该永远不会改变布局。想象一下,如果您为所有选项卡设置默认粗体,但为悬停的选项卡设置普通字体,会发生什么情况。如果你在标签的右边移动鼠标,它会变成“悬停”,字体也会变成“不加粗”,但是这样会缩短它的宽度,使右边的标签变成悬停;在下一次鼠标移动时,先前悬停的鼠标将再次变为粗体,并且它将再次变为悬停。等等。
那么,解决方案是在QTabBar小部件上正确地设置字体属性(如本答案开头所示)。
如果你真的需要自定义的伪状态字体(例如,当前选择的选项卡),那么唯一剩下的解决方案是设置一个自定义QTabBar覆盖 * 两者 * 其
minimumTabSizeHint()
和tabSizeHint()
,并确保选项卡栏总是展开以包含所需的空间。deyfvvtc2#
将QTabWidget的大小策略设置为“Preferred”,以允许其扩展以适应其内容:
将以下样式表添加到QTabWidget: