QStackedWidget采用堆栈的思想,将不同的widget通过addwidget()函数放进该类的对象中,并默认编号,也可显式编号,默认从0开始。
indexOf()函数获取显示widget的页号或编号
setCurrentIndex(int) 来显示该页号的widget。
nice~
实例来一发
(1)效果图
效果图1
效果图2
(2)代码实现
.h文件:
- #ifndef DIALOG_H
- #define DIALOG_H
- #include <QDialog>
- #include<QListWidget>
- #include<QStackedWidget>
- #include<QTableWidget>
- class Dialog : public QDialog
- {
- Q_OBJECT
- public:
- Dialog(QWidget *parent = 0);
- ~Dialog();
- private:
- QListWidget *listwidget;
- QStackedWidget *stackedwidget;
- QTableWidget *tablewidget1;
- QTableWidget *tablewidget2;
- QTableWidget *tablewidget3;
- };
- #endif // DIALOG_H
.cpp文件:
- #include "dialog.h"
- #include<QHBoxLayout>
- Dialog::Dialog(QWidget *parent)
- : QDialog(parent)
- {
- listwidget = new QListWidget;
- listwidget->addItem(tr("tablewidget1"));
- listwidget->addItem(tr("tablewidget2"));
- listwidget->addItem(tr("tablewidget3"));
- tablewidget1 = new QTableWidget(2, 2, 0);
- tablewidget2 = new QTableWidget(4, 4, 0);
- tablewidget3 = new QTableWidget(8, 8, 0);
- stackedwidget = new QStackedWidget;
- stackedwidget->addWidget(tablewidget1);
- stackedwidget->addWidget(tablewidget2);
- stackedwidget->addWidget(tablewidget3);
- QHBoxLayout *h_layout = new QHBoxLayout;
- h_layout->addWidget(listwidget);
- h_layout->addWidget(stackedwidget);
- h_layout->setStretchFactor(listwidget, 1);
- h_layout->setStretchFactor(stackedwidget, 8);
- setLayout(h_layout);
- setWindowTitle(tr("QStackedWidget Test"));
- setFixedSize(950, 300);
- QObject::connect(listwidget, SIGNAL(currentRowChanged(int)), stackedwidget, SLOT(setCurrentIndex(int)));
- }
- Dialog::~Dialog()
- {
- }
main():
- #include "dialog.h"
- #include <QApplication>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Dialog w;
- w.show();
- return a.exec();
- }
(3)补充说明
1、QStackedWidget里装了3个QTableWidget对象,分别是2X2,4X4, 8X8
2、
#include<QListWidget>
#include<QStackedWidget>
这个两个头文件不可少
3、 通过调用QHBoxLayout的函数setStrechFactor()来缩放和拉伸控件。
4、<<C++ GUI QT 4>>中用另一种方法:
stackedLayout = new QStackedLayout;
stackedLayout->addWidget(appearancePage);
stackedLayout->addWidget(webBrowserPage);
stackedLayout->addWidget(mailAndNewsPage);
stackedLayout->addWidget(advancedPage);
通过QStackedWidget类中的QStackedLayout 分组布局来管理widget,效果一样
FROM: http://blog.youkuaiyun.com/hustyangju/article/details/17716477