Qt創建堆疊窗口


1.QT創建堆疊窗口使用類,但是使用它時主窗口不能是MainWindow,否則會出現布局錯誤,本例中使用基類為QDialog

QStackedWidget

2.可以配合列表框QListWidget和QComboBox使用

3.先看代碼stackwindow.h文件:

#define STACKWINDOW_H

#include <QDialog>
#include <QListWidget>//列表框
#include <QStackedWidget>//堆棧窗體
#include <QLabel>


class StackWindow : public QDialog
{
    Q_OBJECT

public:
    StackWindow(QWidget *parent = 0);
    ~StackWindow();

    void initWindow();

private:
    QListWidget *_lw;
    QStackedWidget *_sw;
    QLabel *_lb1;
    QLabel *_lb2;
    QLabel *_lb3;
};

#endif // STACKWINDOW_H

4.看主文件stackwindow.cpp,代碼主要封裝在initWindow函數中

#include "stackwindow.h"
#include <QVBoxLayout>

StackWindow::StackWindow(QWidget *parent)
    : QDialog(parent)
{
    initWindow();

}

StackWindow::~StackWindow()
{

}

void StackWindow::initWindow()
{
    setWindowTitle("堆棧窗體");



    //初始化控件
    _lw = new QListWidget(this);



    //QListWidget中插入選擇項

    _lw->insertItem(0,"主頁");
    _lw->insertItem(1,"娛樂");
    _lw->insertItem(2,"八卦");

    //初始化標簽控件
    _lb1 = new QLabel("看新聞",this);
    _lb2 = new QLabel("看娛樂",this);
    _lb3 = new QLabel("看八卦",this);
    //創建堆疊窗體
    _sw = new QStackedWidget(this);//父對象為主窗體
    //_sw->setStyleSheet("background:red");
    //將三個label加入_sw中
    _sw->addWidget(_lb1);
    _sw->addWidget(_lb2);
    _sw->addWidget(_lb3);


    //對主窗口布局

    QHBoxLayout *hl = new QHBoxLayout();
    hl->setMargin(10);//設置邊距
    hl->setSpacing(10);//設置控件間距

    //布局中加入窗體
    hl->addWidget(_lw);
    hl->addWidget(_sw,0,Qt::AlignHCenter);

    hl->setStretchFactor(_lw,1);//設置控件尺寸占比
    hl->setStretchFactor(_sw,3);//



    setLayout(hl);


    connect(_lw,SIGNAL(currentRowChanged(int)),_sw,SLOT(setCurrentIndex(int)));


}

5.main文件比較簡單

#include "stackwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    StackWindow w;
    w.show();

    return a.exec();
}

6.看一下運行效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM