簡體   English   中英

QSplitter-更改QTabWidget的大小

[英]QSplitter - changing the size of QTabWidget

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

現在,當表單出現時,選項卡的水平尺寸保持不變(它們不會展開-這是錯誤的)。 但是,當我移動拆分器時,選項卡會擴展,一切都很好。 我的問題是如何在表單加載期間使選項卡擴展? 他們為什么不擴大規模?

我認為嘗試在每次發生調整大小事件時顯式調整選項卡的大小並不是最佳方法。 如果設置正確,則由於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?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM