0

我目前有一个 QTabWidget 和一些布局。现在我希望我的 QtabWidget 的所有选项卡都占据 QtabWidget 的宽度,所以我有这样的东西。以下方法扩展了我的 Qtabwidget 中的两个选项卡,因此它们的大小与 QtabWidget 相同

void Contacts::AdjustTabs( int pos, int index )
{
    std::string orig_sheet = ui.tabWidget->styleSheet().toStdString();
    QString new_style = QString("QTabBar::tab { width: %1px; } ").arg((ui.tabWidget->size().width()  /ui.tabWidget->count()));
    std::string t = new_style.toStdString();
    orig_sheet = orig_sheet + t;
    ui.tabWidget->setStyleSheet(orig_sheet.c_str());
}

上述方法工作正常。现在,当 QTabwidget 与其他一些布局一起设置在 Qsplitter 布局中时,问题就开始了。在启动构造时,上述方法似乎不起作用,例如我有这样的东西

Someclass::SomeConstructor()
{
    ui.setupUi(this);
     ......... 
     QObject::connect(ui.splitter,SIGNAL(splitterMoved(int,int)),this,SLOT(AdjustTabs(int,int)));
     AdjustTabs(0,0);
}

现在,当表单出现时,选项卡的水平大小保持不变(它们不会扩展 - 这是错误的)。但是,当我移动拆分器时,选项卡会展开,一切都很好。我的问题是如何让我的选项卡在表单加载期间展开?他们为什么不扩张?

4

1 回答 1

0

我认为在发生调整大小事件时尝试显式调整选项卡的大小并不是最好的方法。如果设置正确,由于 QSplitter 和 QTabWidget 的内部布局管理器的默认行为,自然会发生适当的大小调整。这是我的意思的一个非常简单的例子;请注意,该程序中没有代码可以显式处理任何内容的大小调整,但是所有选项卡都会在拆分器移动和/或窗口大小调整时正确调整大小:

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QSplitter>
#include <QTabWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMainWindow mw;

    QSplitter * splitter = new QSplitter(&mw);

    QTabWidget * tab = new QTabWidget;
    tab->addTab(new QPushButton("Content of tab #1"), "tab #1");
    tab->addTab(new QPushButton("Content of tab #2"), "tab #2");
    tab->addTab(new QPushButton("Content of tab #3"), "tab #3");
    splitter->addWidget(tab);

    splitter->addWidget(new QPushButton("Some other content"));

    mw.setCentralWidget(splitter);
    mw.show();

    return a.exec();
}

所以问题就变成了——为什么你的标签不能自动调整大小?也许您将它们的 sizePolicy 属性设置为 Fixed,而不是 Preferred 或 Ignored?

于 2014-05-18T02:55:31.817 回答