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.看一下運行效果: