css 如何在qtabwidget中设置不同宽度的标签?

idfiyjo8  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(457)

在我的项目中,有一个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文件.

holgip5t

holgip5t1#

tl;dr

将字体属性移动到主QTabBar类型选择器:

QTabBar {
    font: 75 11pt "MS Shell Dlg 2";
    font-weight: bold;
}
QTabBar::tab {
    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));
    ...

说明

该问题是由于字体应用于::tab子控件所致。
虽然这可能是有道理的,但它产生了一个概念问题:QTabBar使用 widget 字体来提供正确的tabSizeHint(),QSS规则也基于此,即使::tab子控件具有不同的字体集。
我同意实现并不完美,但由于子控件也可以有伪状态(例如,:hover:selected),结果是子控件的字体度量不考虑布局。简单地说:子控件选择器不能改变子控件大小,即使其字体度量改变也不行。
请注意,这一点非常重要:状态变化应该永远不会改变布局。想象一下,如果您为所有选项卡设置默认粗体,但为悬停的选项卡设置普通字体,会发生什么情况。如果你在标签的右边移动鼠标,它会变成“悬停”,字体也会变成“不加粗”,但是这样会缩短它的宽度,使右边的标签变成悬停;在下一次鼠标移动时,先前悬停的鼠标将再次变为粗体,并且它将再次变为悬停。等等。
那么,解决方案是在QTabBar小部件上正确地设置字体属性(如本答案开头所示)。
如果你真的需要自定义的伪状态字体(例如,当前选择的选项卡),那么唯一剩下的解决方案是设置一个自定义QTabBar覆盖 * 两者 * 其minimumTabSizeHint()tabSizeHint(),并确保选项卡栏总是展开以包含所需的空间。

deyfvvtc

deyfvvtc2#

将QTabWidget的大小策略设置为“Preferred”,以允许其扩展以适应其内容:

myTabWidget.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);

将以下样式表添加到QTabWidget:

QTabWidget::tab-bar {
    width: fit-content;
}

相关问题