天天看点

布局管理之堆栈窗体QStackedWidget类

堆栈窗口可以根据选择项的不同显示不同的窗体

[cpp] ​​view plain​​​​copy​​​​print​​​​?​​

  1. // stackeddlg.h  
  2. #ifndef STACKEDDLG_H  
  3. #define STACKEDDLG_H  
  4. #include <QDialog>  
  5. #include <QLabel>  
  6. #include <QListWidget>  
  7. #include <QStackedWidget>  
  8. class StackedDlg : public QDialog  
  9. {  
  10.     Q_OBJECT  
  11. public:  
  12.     explicit StackedDlg(QWidget *parent = 0);  
  13. signals:  
  14. public slots:  
  15. private:  
  16.     QLabel *textLabel;  
  17.     QLabel *showLabel;  
  18.     QLabel *aboutLabel;  
  19.     QListWidget *list;  
  20.     QStackedWidget *stack;  
  21. };  
  22. #endif // STACKEDDLG_H  
  1. //stackeddlg.cpp  
  2. #include "stackeddlg.h"  
  3. #include <QHBoxLayout>  
  4. StackedDlg::StackedDlg(QWidget *parent) :  
  5.     QDialog(parent)  
  6.     //创建一个QListWidget控件 并向其中添加列表项  
  7.     list = new QListWidget();  
  8.     list->insertItem(0, tr("文本窗口"));  
  9.     list->insertItem(1, tr("显示窗口"));  
  10.     list->insertItem(2, tr("关于窗口"));  
  11.     textLabel = new QLabel(tr("学习使用堆栈窗口"));  
  12.     showLabel = new QLabel(tr("仅仅是一个示例程序"));  
  13.     aboutLabel = new QLabel(tr("欢迎交流,共同学习"));  
  14.     //创建QStackedwidget控件  
  15.     stack = new QStackedWidget();  
  16.     //将控件添加到堆栈窗口中  
  17.     stack->addWidget(textLabel);  
  18.     stack->addWidget(showLabel);  
  19.     stack->addWidget(aboutLabel);  
  20.     //使用一个水平布局管理器对对话框进行布局  
  21.     QHBoxLayout *mainLayout = new QHBoxLayout(this);  
  22.     mainLayout->addWidget(list);  
  23.     mainLayout->addWidget(stack, 0, Qt::AlignHCenter);  
  24.     //设置mainLayout的边框与对话框边缘的距离  
  25.     mainLayout->setMargin(5);  
  26.     mainLayout->setSpacing(5);  
  27.     mainLayout->setStrechFactor(list, 1);
  28.     mainLayout->setStrechFactor(stack, 3);
  29.     //信号与槽的连接,实现按选择显示窗体  
  30.     //此处堆栈窗口的index按插入的顺序从0依次排序,与QListWidget的条目排序一致  
  31.     connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));  
  32.     this->setWindowTitle(tr("堆栈窗口"));  
  33. }  
  1. //main.cpp  
  2. #include <QApplication>  
  3. #include <QTextCodec>  
  4. int main(int argc, char *argv[])  
  5.     QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
  6.     QApplication app(argc, argv);  
  7.     StackedDlg dlg;  
  8.     dlg.show();  
  9.     return app.exec();