Qt 佈局管理之 堆疊窗體
阿新 • • 發佈:2022-03-29
StackDlg.h
// // Created by simp on 2022/3/29. // #ifndef STACKEDWIDGET_STACKDLG_H #define STACKEDWIDGET_STACKDLG_H #include <QListWidget> #include <QString> #include <QDialog> #include <QStackedWidget> #include <QLabel> class StackDlg :public QDialog{ Q_OBJECT public: explicit StackDlg(QWidget *parent=0); ~StackDlg() override; private: QListWidget *list; QStackedWidget *stack; QLabel *label1; QLabel *label2; QLabel *label3; }; #endif //STACKEDWIDGET_STACKDLG_H
StackDlg.cpp
// // Created by simp on 2022/3/29. // #include "StackDlg.h" #include <QHBoxLayout> StackDlg::StackDlg(QWidget *parent): QDialog(parent) { setWindowTitle(tr("StackedWidget")); list = new QListWidget(this);//新建一個QListWidget控制元件物件 //新建的QListWidget控制元件中插入三個條目 作為選擇項 list->insertItem(0, tr("Window1")); list->insertItem(1, tr("Window2")); list->insertItem(2, tr("Window3")); //建立三個QLabel標籤控制元件物件,作為堆疊窗體需要顯示的三層窗體 label1 = new QLabel(tr("WindowTest1")); label2 = new QLabel(tr("WindowTest2")); label3 = new QLabel(tr("WindowTest3")); //新建一個QStackWidget堆疊視窗物件 stack = new QStackedWidget(this); //將建立的三個label標籤控制元件一次插入到堆疊視窗中 stack->addWidget(label1); stack->addWidget(label2); stack->addWidget(label3); auto *mainLayout = new QHBoxLayout(this); //對整個對話窗體進行佈局 mainLayout->setMargin(5);//設定對話窗體之間的邊距為5 mainLayout->setSpacing(5);//設定各個控制元件之間的間距為5 mainLayout->addWidget(list); mainLayout->addWidget(stack,0,Qt::AlignCenter); mainLayout->setStretchFactor(list,1); mainLayout->setStretchFactor(stack,3); connect(list, SIGNAL(currentRowChanged(int)),stack, SLOT(setCurrentIndex(int))); } StackDlg::~StackDlg() { }
main.cpp
#include <QApplication>
#include <QDebug>
#include "StackDlg.h"
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
StackDlg w;
w.show();
return a.exec();
}