C++ GUI Qt4编程(13)-6.2preferencedialog

1. 主要介绍了QStackedLayout、QListWidget、QDialogButtonBox的简单用法。
2. QStackedLayout:
  要使某个特定的子窗口部件可见,可以用setCurrentIndex()函数调用页号来实现。
  使用indexOf()可以获取子窗口部件的页号。
3. 创建此对话框的简单步骤:
  1) 建立一个QListWidget和一个QStackedWidget,并添加到QGridLayout布局中。
  2) 在QListWidget中用addItem(),添加新的项目(或者说是新列表?)。
  3) 在QStackedWidget中,新建QWisget类的分页,并用自窗口部件和布局来填充分页。
  4) 在QGridLayout中添加QDialogButtonBox按钮。
  5) 将列表窗口部件的currentRowChanged(int)信号和分组窗口部件的setCurrentIndex(int)
     槽连接起来。实现单击列表,在分组窗口中显示对应的信息。
  6) 把列表框的currentRow属性值设为0。
4. 使用QTabWidget会比此方法更简单。
5. preferencedialog.cpp

 1 /**/
 2 #include "preferencedialog.h"
 3 
 4 #include <QListWidget>
 5 #include <QStackedLayout>
 6 #include <QGridLayout>
 7 #include <QLabel>
 8 #include <QVBoxLayout>
 9 #include <QPushButton>
10 #include <QDialogButtonBox>
11 
12 PreferenceDialog::PreferenceDialog(QWidget *parent)
13     : QWidget(parent)
14 {    
15     createAppearancePage();
16     createWebBrowserPage();
17     createMailAndNewsPage();
18     createAdvancedPage();
19     
20     buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |
21                                  QDialogButtonBox::Cancel);
22     
23     listWidget = new QListWidget;
24     listWidget->addItem(tr("Appearance"));
25     listWidget->addItem(tr("Web Browse"));
26     listWidget->addItem(tr("Mail & News"));
27     listWidget->addItem(tr("Advanced"));
28     
29     stackedLayout = new QStackedLayout;
30     stackedLayout->addWidget(appearancePage);
31     stackedLayout->addWidget(webBrowserPage);
32     stackedLayout->addWidget(mailAndNewsPage);
33     stackedLayout->addWidget(advancedPage);
34 
35     connect(listWidget, SIGNAL(currentRowChanged(int)),
36             stackedLayout, SLOT(setCurrentIndex(int)));
37     
38     
39     QGridLayout *mainLayout = new QGridLayout;
40     mainLayout->addWidget(listWidget, 0, 0);
41     mainLayout->addLayout(stackedLayout, 0, 1);
42     mainLayout->addWidget(buttonBox, 1, 0, 1, 2);
43     
44     setLayout(mainLayout);
45     
46     listWidget->setCurrentRow(0);        /*设置起始页*/
47 }
48 
49 void PreferenceDialog::createAppearancePage()
50 {
51     appearancePage = new QWidget;
52     
53     QLabel *appearanceLabel = new QLabel(tr("appearance"));
54     QVBoxLayout *layout = new QVBoxLayout;
55     layout->addWidget(appearanceLabel);
56     
57     appearancePage->setLayout(layout);
58 }
59 
60 void PreferenceDialog::createWebBrowserPage()
61 {
62     webBrowserPage = new QWidget;
63     
64     QPushButton *webBrowserButton = new QPushButton(tr("web browser"));
65     QVBoxLayout *layout = new QVBoxLayout;
66     layout->addWidget(webBrowserButton);
67     
68     webBrowserPage->setLayout(layout);
69 }
70 
71 void PreferenceDialog::createMailAndNewsPage()
72 {
73     mailAndNewsPage = new QWidget;
74     
75     QLabel *mailAndNewsLabel = new QLabel(tr("mail & news"));
76     QVBoxLayout *layout = new QVBoxLayout;
77     layout->addWidget(mailAndNewsLabel);
78     
79     mailAndNewsPage->setLayout(layout);
80 }
81 
82 void PreferenceDialog::createAdvancedPage()
83 {
84     advancedPage = new QWidget;
85     
86     QPushButton *advancedButton = new QPushButton(tr("advanced"));
87     QVBoxLayout *layout = new QVBoxLayout;
88     layout->addWidget(advancedButton);
89     
90     advancedPage->setLayout(layout);
91 }

6. preferencedialog.h

 1 /**/
 2 #ifndef PREFERENCEDIALOG_H
 3 #define PREFERENCEDIALOG_H
 4 
 5 #include <QWidget>
 6 
 7 class QListWidget;
 8 class QStackedLayout;
 9 class QDialogButtonBox;
10 
11 class PreferenceDialog : public QWidget
12 {
13     Q_OBJECT
14     
15 public:
16     PreferenceDialog(QWidget *parent = 0);
17     
18 private:
19     QListWidget *listWidget;
20     QStackedLayout *stackedLayout;
21     QWidget *appearancePage;
22     QWidget *webBrowserPage;
23     QWidget *mailAndNewsPage;
24     QWidget *advancedPage;
25     QDialogButtonBox *buttonBox;
26     
27     void createAppearancePage();
28     void createWebBrowserPage();
29     void createMailAndNewsPage();
30     void createAdvancedPage();
31 };
32 
33 #endif    /*PREFERENCEDIALOG_H*/

7. main.cpp

 1 /**/
 2 #include <QApplication>
 3 #include "preferencedialog.h"
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     QApplication app(argc, argv);
 8     
 9     PreferenceDialog dialog;
10     dialog.show();
11     
12     return app.exec();
13 }

8. 效果

posted @ 2017-08-17 21:43  seifguo  阅读(290)  评论(0编辑  收藏  举报