堆栈窗口 QStackedWidget 测试

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,效果一样




你可能感兴趣的:(QListWidget,QStackedWidget,QStackedLayout)