如何在 QTabWidget Qt 中展开选项卡

Kel*_*inS 5 c++ qt qtabwidget

我有一个QTabWidget这样的:

在此处输入图片说明

但我想扩展选项卡以“填充”整个小部件宽度,如下所示:

在此处输入图片说明

我怎样才能做到这一点?

我正在使用Qt 5.3.2Qt Creator 3.2.1


更新

我尝试使用该setExpanding功能:

ui->myTabWidget->tabBar()->setExpanding(true);
Run Code Online (Sandbox Code Playgroud)

但它没有用。

X 4*_* IR 7

只需将扩展模式和文档模式设置为 true 即可。

ui->tabWidget->tabBar()->setDocumentMode(true);
ui->tabWidget->tabBar()->setExpanding(true);
Run Code Online (Sandbox Code Playgroud)

埃德特图像描述在这里

对我有用:)


gou*_*oug 6

我发现它QTabBar有一种setExpanding方法,它似乎完全符合您的要求,但我尝试过(在 Windows 上),但它不起作用。这是代码:

ui->tabWidget->tabBar()->setExpanding (true);
Run Code Online (Sandbox Code Playgroud)

然后我找到了下面的帖子:

https://forum.qt.io/topic/47404/qtabbar-will-not-expand-its-tabs

我发现上述帖子中提供的答案值得商榷。他说,无论扩展属性是否设置为 true,它都尊重操作系统风格,它是一个功能,而不是一个错误,并且您必须子类化QTabBar以获得所需的行为。如果我编写代码来做特定的事情,我觉得我的指令应该覆盖操作系统风格。如果我只想要操作系统风格,我会忽略那个特殊的代码。无论我多么不同意实施,这似乎是我们坚持的。

因此,如果拥有这种外观对您很重要,那么您将需要子类化QTabBar,覆盖tabSizeHint- 我怀疑这需要进行一些实验 - 并使用QTabWidget::setTabBar您自己的来替换默认值。根据文档,您必须在添加任何选项卡之前执行此操作,因此如果您想在 Qt Designer 中创建选项卡小部件,则此机制不可行。(另一个支持setExpanding作为对操作系统风格的替代而不是实现方式的论点。)


Kel*_*inS 2

正如mostefa在这里回答的那样,我可以使用styleSheet为选项卡设置固定宽度。

我正在根据宽度计算宽度QTabWidget

为了正确获取QTabWidget宽度,我需要在showEvent函数中获取它:

void LogListForm::showEvent(QShowEvent *ev)
{
    /*
     * Divide by 2 because we have 2 tabs.
     * I need to decrease 24 pixels to fill the width correctly.
     */
    int tabWidth = (ui->myTabWidget->width()/2)-24;

    /*
     * Then, I set this tabWidth to the styleSheet.
     * Note: I need to set the previously styleSheet to not lose it
     */
    ui->myTabWidget->setStyleSheet( ui->myTabWidget->styleSheet() +
                                    "QTabBar::tab {"
                                    "width: " + QString::number(tabWidth) + "px; }" );
}
Run Code Online (Sandbox Code Playgroud)