• 10771阅读
  • 1回复

【摘录】《KDE2/Qt编程金典》第五章:预定义对话框——5.3 QTabDialog对话框 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-12-23
QTabDialog把两个或者更多个对话框放置到一个对话框中,这些对话框层叠起来,提供标签实现各个对话框之间的切换。下面的程序创建了一个简单的QTabDialog
ShowTabs Header

1 /* showtabs.h */
2 #ifndef SHOWTABS_H
3 #define SHOWTABS_H
4
5 #include <qwidget.h>
6
7 class ShowTabs: public QWidget
8 {
9 Q_OBJECT
10 public:
11 ShowTabs(QWidget *parent=0,const char *name=0);
12 private slots:
13 void slotTab();
14 };
15
16 #endif


ShowTabs

1 /* showtabs.cpp */
2 #include <kapp.h>
3 #include <qpushbutton.h>
4 #include <qtabdialog.h>
5 #include <qlayout.h>
6 #include <kfontdialog.h>
7 #include <kdatepik.h>
8 #include <kselect.h>
9 #include “showtabs.h”
10
11 int main(int argc,char **argv)
12 {
13 KApplication app(argc,argv,”showtabs”);
14 ShowTabs showtabs;
15 showtabs.show();
16 app.setMainWidget(&showtabs);
17 return(app.exec());
18 }
19
20 ShowTabs::ShowTabs(QWidget *parent,const char *name)
21 : QWidget(parent,name)
22 {
23 QPushButton *button;
24 QVBoxLayout *box = new QVBoxLayout(this,12);
25
26 button = new QPushButton(“Show Tab Dialog”,this);
27 box->addWidget(button);
28 connect(button,SIGNAL(clicked()),
29 this,SLOT(slotTab()));
30
31 resize(10,10);
32 box->activate();
33 }
34 void ShowTabs::slotTab()
35 {
36 QTabDialog *tab = new QTabDialog(this,”tabdial”,TRUE);
37 tab->setCaption(“The QTabDialog Widget”);
38 tab->setCancelButton();
39
40 QWidget *fonts = new KFontChooser(this,”fonts”);
41 tab->addTab(fonts,”Fonts”);
42
43 QWidget *date = new KDatePicker(this);
44 tab->addTab(date,”Date”);
45
46 QWidget *hgradient = new KGradientSelector(
47 KSelector::Horizontal,this);
48 tab->addTab(hgradient,”H Gradient”);
49
50 QWidget *vgradient = new KGradientSelector(
51 KSelector::Vertical,this);
52 tab->addTab(vgradient,”V Gradient”);
53
54 tab->show();
55 }

ShowTabs类只是用来弹出QTabDialog,因此它内部的定义,除了一个构造函数之外,只有一个slot方法,此方法将弹出对话框。
第11行开始为主程序代码,创建了一个ShowTabs部件并把它设置为主窗口将要显示的部件。
第20行开始的ShowTabs构造函数,使用了一个容器来包含一个按钮。第28行把这个按钮的clicked()信号和名为slotTab()的slot连接到一起。
第34行开始的slot方法slotTab()用来创建并且显示QTabDialog。第36行创建了对话框。第1个参数是对话框的父部件,第2个参数是所起的名字;第3个参数指定了QTabDialog是模式对话框。默认的是非模式对话框。
第37行的setCaption()调用指定了将要显示在对话框窗口的标题栏上的标题。setCancelButton()调用指定了对话框中包含了一个Cancel按钮。
对话框可以有4个按钮,默认的情况下总含有OK按钮,其它的按钮最需要指定。其它的按钮通过调用 所提供setDefaultButton()、setHelpButton()和setApplyButton()被包含进来。包含按钮的方法可以没有输入参数,如第38行所示,或者输入一个字符串作为按钮的显示文本(包括setOkButton())。为了接收来自按钮的信号,需要把几个slot和相对应的applyButtonPressed()、CancelButtonPressed()、defaultButtonPressed()以及helpButtonPressed()连接起来。
第40行到第50行创建了位于QTabDialog的4张页面(有时叫做标签或者标签页)。为了保持代码的简单,使用了4个标准的KDE Widget,它们都不需要软件返回用户输入的数据。当然可以构造自己的部件。通常,会有一个slot连接到Ok和Apply按钮,它们将读取4个部件的信息。
对话框的大小是由它所包含的部件的大小决定的。它将显示为尽可能的高和宽,以便能够显示最大的部件;最小的部件在水平和垂直方向上都位于中央。使用标签弹出对话框,在标签之间切换打开不同的对话框现在使用得越来越普遍,这样可以显示所有可以用的选项,而不必显示一张充满了数据输入选项的复杂混乱的页面。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zhow
只看该作者 1楼 发表于: 2009-11-12
金典》第五章:预定义对话框——5.3 QTabDialog对话框
dsafag
快速回复
限100 字节
 
上一个 下一个