1. 程式人生 > 其它 >Qt 佈局管理之 堆疊窗體

Qt 佈局管理之 堆疊窗體

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();
}