Qt佈局管理
分割視窗類 QSplitter
使用流程如下:
建一個QSplitter類物件,作為主分割視窗,設定此分割視窗為水平分割視窗。
QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);
新建一個QTextEdit類物件,並將其插入主分割視窗中。
QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain);
設定TextEdit中文字的對齊方式
textLeft->setAlignment(Qt::AlignCenter);
新建一個QSplitter類物件,作為右分割視窗,設定此分割視窗為垂直分割視窗,並以主分割視窗為父視窗。
QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);
呼叫setOpaqueResize(bool)方法用於設定分割視窗的分割條在拖曳時是否為實時更新顯示,若設為true則實時更新顯示,若設為false則在拖曳時只顯示一條灰色的粗線條,在拖曳到位並釋放滑鼠後再顯示分割條。
splitterRight->setOpaqueResize(false);
呼叫setStretchFactor()方法用於設定可伸縮控制元件,它的第1個引數用於指定設定的控制元件序號,控制元件序號按插入的先後次序從0起依次編號;第2個引數為大於0的值,表示此控制元件為可伸縮控制元件。
splitterMain->setStretchFactor(1,1);
停靠視窗類 QDockWidget
使用流程如下:
建立一個QDockWidget物件的停靠窗體。
QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
設定此停靠窗體的屬性,通常呼叫setFeatures()及setAllowedAreas()兩種方法。
void setFeatures(DockWidgetFeatures features); /*引數QDockWidget::DockWidgetFeatures指定停靠窗體的特性,包括以下幾種引數。 ① QDockWidget::DockWidgetClosable:停靠窗體可關閉。 ② QDockWidget::DockWidgetMovable:停靠窗體可移動。 ③ QDockWidget::DockWidgetFloatable:停靠窗體可浮動。 ④ QDockWidget::AllDockWidgetFeatures:此引數表示擁有停靠窗體的所有特性。 ⑤ QDockWidget::NoDockWidgetFeatures:不可移動、不可關閉、不可浮動。*/ void setAllowedAreas(Qt::DockWidgetAreas areas); /*引數Qt::DockWidgetAreas指定了停靠窗體可停靠的區域,包括以下幾種引數。 ① Qt::LeftDockWidgetArea:可在主視窗的左側停靠。 ② Qt::RightDockWidgetArea:可在主視窗的右側停靠。 ③ Qt::TopDockWidgetArea:可在主視窗的頂端停靠。 ④ Qt::BottomDockWidgetArea:可在主視窗的底部停靠。 ⑤ Qt::AllDockWidgetArea:可在主視窗任意(以上四個)部位停靠。 ⑥ Qt::NoDockWidgetArea:只可停靠在插入處。 */
新建一個要插入停靠窗體的控制元件,常用的有QListWidget和QTextEdit。
QTextEdit *te1 =new QTextEdit(); te1->setText(tr("Window1,The dock widget can be moved between docks by the user" ""));
將控制元件插入停靠窗體,呼叫QDockWidget的setWidget()方法。
dock->setWidget(te1);
使用addDockWidget()方法在MainWindow中加入此停靠窗體。
addDockWidget(Qt::RightDockWidgetArea,dock);
堆疊窗體類 QStackedWidget
使用流程如下:
設定佈局
QHBoxLayout *mainLayout =new QHBoxLayout(this); mainLayout->setMargin(5); mainLayout->setSpacing(5);
建立列表控制元件
list =new QListWidget(this); list->insertItem(0,tr("Window1")); list->insertItem(1,tr("Window2")); list->insertItem(2,tr("Window3"));
建立堆疊窗體並逐個加入標籤控制元件
label1 =new QLabel(tr("WindowTest1")); label2 =new QLabel(tr("WindowTest2")); label3 =new QLabel(tr("WindowTest3")); stack =new QStackedWidget(this); stack->addWidget(label1); stack->addWidget(label2); stack->addWidget(label3);
將列表和堆疊窗體加入佈局
mainLayout->addWidget(list); mainLayout->addWidget(stack,0,Qt::AlignHCenter);
設定可伸縮控制元件,第1個引數用於指定設定的控制元件(序號從0起編號),第2個引數的值大於0則表示此控制元件為可伸縮控制元件。
mainLayout->setStretchFactor(list,1): mainLayout->setStretchFactor(stack,3);
QListWidget的currentRowChanged()訊號與堆疊窗體的setCurrentIndex()槽函式連線起來,實現按選擇顯示窗體。此處的堆疊窗體index按插入的順序從0起依次排序,與QListWidget的條目排序相一致。
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int))):
基本佈局
addWidget()方法用於加入需要佈局的控制元件,方法原型如下:
void addWidget ( QWidget *widget, //需要插入的控制元件物件 int fromRow, //插入的行 int fromColumn, //插入的列 int rowSpan, //表示佔用的行數 int columnSpan, //表示佔用的列數 Qt::Alignment alignment=0 //描述各個控制元件的對齊方式 )
addLayout()方法用於加入子佈局,方法原型如下:
void addLayout ( QLayout *layout, //表示需要插入的子佈局物件 int row, //插入的起始行 int column, //插入的起始列 int rowSpan, //表示佔用的行數 int columnSpan, //表示佔用的列數 Qt::Alignment alignment=0 //指定對齊方式 )
使用流程如下:
- 建立控制元件並進行設定;
- 文字
- 風格:setFrameStyle
- 選項:addItem
- 建立子佈局(QHBoxLayout、QVBoxLayout)並進行設定;
- 列寬:setColumnStretch
- 列距:setSpacing
- 行距:setMargin
- 將控制元件加入子佈局;
- 加入:addWidget
- 佔位:addStretch
- 建立主佈局(QGridLayout)並進行設定;
- 將子佈局加入主佈局;
- 加入:addLayout