blogernice

导航

布局管理之堆栈窗体QStackedWidget类

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

 
  1. // stackeddlg.h  
  2. #ifndef STACKEDDLG_H  
  3. #define STACKEDDLG_H  
  4.   
  5. #include <QDialog>  
  6. #include <QLabel>  
  7. #include <QListWidget>  
  8. #include <QStackedWidget>  
  9.   
  10. class StackedDlg : public QDialog  
  11. {  
  12.     Q_OBJECT  
  13. public:  
  14.     explicit StackedDlg(QWidget *parent = 0);  
  15. signals:  
  16. public slots:  
  17.   
  18. private:  
  19.     QLabel *textLabel;  
  20.     QLabel *showLabel;  
  21.     QLabel *aboutLabel;  
  22.     QListWidget *list;  
  23.     QStackedWidget *stack;  
  24. };  
  25. #endif // STACKEDDLG_H  


 

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


 

    1. //main.cpp  
    2. #include <QApplication>  
    3. #include <QTextCodec>  
    4. #include "stackeddlg.h"  
    5. int main(int argc, char *argv[])  
    6. {  
    7.     QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
    8.     QApplication app(argc, argv);  
    9.     StackedDlg dlg;  
    10.     dlg.show();  
    11.     return app.exec();  
    12. }  

posted on 2019-08-02 10:21  blogernice  阅读(251)  评论(0编辑  收藏  举报