QTabwidget 的标签文本对齐不起作用

Posted

技术标签:

【中文标题】QTabwidget 的标签文本对齐不起作用【英文标题】:QTabwidget's tab text alignment not working 【发布时间】:2018-02-14 09:04:46 【问题描述】:

我正在尝试在左侧显示打开的选项卡文本。我在样式表中写了它。但它不起作用。

这是我使用的样式表

QTabWidget QTabBar
    background-color: #373738;
    height: 30px;


QTabWidget QTabBar::tab
    text-align: left;
    background-color: #136ba2;
    border-style: 1px rgb(67, 67, 67);
    height: 30px;
    width: 130px;
    color: #136ba2;
    padding: 0px 5px 0px 5px;


QTabWidget QTabBar::tab:selected
    background-color: #5A5B5C;
    font-weight: bold;
    color: #ffffff;

QTabWidget QTabBar::tab:!selected
    background-color:#353536;
    color:  #B4B4B4;

QTabWidget QTabBar::tab:hover
    background-color:  #5A5B5C;
    color:  #ffffff;

here is an image

【问题讨论】:

【参考方案1】:

根据文档,我认为样式表是不可能的:

text-align [...] 目前只有 QPushButton 和 QProgressBar 支持此属性。

https://doc.qt.io/qt-5/stylesheet-reference.html#list-of-properties

【讨论】:

还有其他方法可以实现吗?? 别人问我看的都没有回答,似乎除了自己处理文字的绘画之外没有什么直接的。你可以查看这个问题的答案:***.com/q/3607709/6165833【参考方案2】:

这可以使用选项卡按钮小部件来显示选项卡文本来完成。

有一个标签,文字左对齐:

QLabel * button = new QLabel("text");
button->setAlignment(Qt::AlignLeft);

如有必要,将选项卡文本设置为空字符串:

ui->tabWidget->tabBar()->setTabText(index, "");

将标签设置为标签按钮小部件:

ui->tabWidget->tabBar()->setTabButton(index, QTabBar::LeftSide, button);

您仍然可以设置标签的样式,在选项卡小部件样式表中添加一个 QLabel 条目:

QLabel color: white; 

这里唯一的问题:无法使用 CSS 来根据选择(即使选定的选项卡文本加粗)来设置标签文本的样式。但仍然可以捕获标签小部件currentChanged 信号:

void Form::on_tabWidget_currentChanged(int index)

    for(int i=0; i<ui->tabWidget->tabBar()->count(); i++)
    
        QWidget * button = ui->tabWidget->tabBar()->tabButton(i, QTabBar::LeftSide);
        if(button != nullptr)
        
            QFont font = button->font();
            font.setBold(i == index);
            button->setFont(font);
        
    

【讨论】:

以上是关于QTabwidget 的标签文本对齐不起作用的主要内容,如果未能解决你的问题,请参考以下文章

从对象标签上的数据属性获取文本时,文本对齐不起作用

文本对齐证明不起作用

QTabWidget 中的标签文本对齐

水平居中元素文本对齐中心不起作用

SwiftUI 与 maxWidth 的文本对齐不起作用

嵌套文本,垂直对齐不起作用 - React Native