2017-03-29 147 views
1

我創建了一個QTabWidget(不帶選項卡)使用Qt的設計工具,現在我需要創建標籤和動態添加窗口小部件。如何將佈局設置爲QTabWidget中的選項卡?

我可以創建標籤,並使用下面的代碼添加小部件:

MyCustomWidget *myCustomWidget = new MyCustomWidget(this); 
ui->myTabWidget->addTab(myCustomWidget, "New Tab"); 

的問題是,小部件留在我QTabWidget的左上角,但我需要對齊在中心(水平)我的QTabWidget

如何設置水平佈局這一新標籤產生的?

注意1:我的小部件(MyCustomWidget)具有固定大小。

注2:我使用Qt 5.3。

回答

0

繼@Satus想法,我創建了一個新的QFrame,設置最小尺寸爲myTabWidget的大小,設置一個水平佈局,往其中加myCustomWidget,增加了兩個QSpacerItem(左和右):

QFrame *frame= new QFrame(this); 
frame->setMinimumWidth(ui->myTabWidget->width()); 
frame->setMinimumHeight(ui->myTabWidget->height()); 

MyCustomWidget *myCustomWidget = new MyCustomWidget(frame); 

QHBoxLayout *hLayout = new QHBoxLayout(); 

hLayout->addItem(new QSpacerItem(10, 10, QSizePolicy::Expanding, QSizePolicy::Expanding)); 
hLayout->addWidget(myCustomWidget); 
hLayout->addItem(new QSpacerItem(10, 10, QSizePolicy::Expanding, QSizePolicy::Expanding)); 

frame->setLayout(hLayout); 

ui->myTabWidget->addTab(frame, "New Tab"); 

它的工作,但如果有人有一個更優雅的方式來做到這一點,請與我們分享。

2

它總是會在左上角。您可以在您的頂部添加另一個小部件,並將它們放置在該小部件的中間,或者使您的小部件成爲該選項卡的大小並將其內容置於中間。您可以使用QWidget的setLayout方法來設置您的小部件佈局。

1

你並不需要一個QFrame,一個簡單的QWidget和中心的佈局將做到這一點:

auto w = new QWidget; 

auto txtEdit = new QTextEdit; // Replace with whatever custom widget 
txtEdit->setFixedSize(150, 150); // Only here to simulate your fixed size 

auto layout = new QVBoxLayout; 
layout->addWidget(txtEdit, 0, Qt::AlignHCenter); 
w->setLayout(layout); 

ui->tabWidget->addTab(w, "MyTab"); 
相關問題