QSplitter语言 - 改变QTabWidget的大小

QSplitter - changing the size of QTabWidget

本文关键字:QTabWidget 改变 语言 QSplitter      更新时间:2023-10-16

我目前有一个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);
}

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

我认为每当发生resize事件时,尝试显式调整选项卡的大小并不是最好的方法。如果设置得当,由于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或ignore ?