• 8413阅读
  • 1回复

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

上一主题 下一主题
离线XChinux
 

只看楼主 正序阅读 楼主  发表于: 2005-12-02
5.1预定义对话框_About对话框

在KDE和QT中定义了相当多的对话框。本章将介绍一些经常使用的对话框。可以使用这些对话框作为基类,来创建自己定制的版本,然而更为常见的方法是,用户所需要做的只是采用实例化这种对话框的方式,设置自己需要的选项。本章并未包含所有的对话框,一些特殊用途的对话框将在本书其它章节中介绍

每一个完成了的程序都有一个About对话框,这个对话框窗口用来显示与软件继承性相关的信息。编程者可以把它们的名字显示在这里。About对话框可以由按钮弹出,但更为常见的是作为菜单中的一个选择项。
KAboutDialog类非常灵活,它由一组可选择的部分组成,用户可以选择包含或者不包含这些组成部分。它还有两个单独的构造函数,可以提供两种不同的基本外观。默认显示出的只有一个OK按钮,用来关闭对话框。更加灵活一点的,它由KDialogBase类继承而来,此类提供了很多选项。
KAboutDialog类有两个构造函数。除了各自不同的参数组成之外,这两个构造函数还以不同的方式放置对话框,每种方式都有一组各自的选项。构造函数I是标准的的QT棍,有3个正常参数,它们分别为父部件,内部名称以及窗口是否为模式:
KAboutDialog(QWidget *parent, const char *name=0, bool modal = true)

构造函数II有很多参数,其中包含一些标志,用来设置对话框以便从众多种配置中选择一种显示方式:
KAboutDialog(int dialogLayout,const QString &caption,
int buttonMask,int defaultButton,QWidget *parent=0,
const char *name=0,bool modal=false,bool separator=false,
const QString &user1=QString::null,
const QString &user2=QString::null,
const QString &user3=QString::null)

下面的例子使用了构造函数I和构造函数II来创建并显示一些可能的配置。其实有很多种可能的组合,而不止本程序中举例使用的这一种,但这些组合都是在这些基本的结构上变得而得的。
ShowAbout Header

1 /* showabout.h */
2 #ifndef SHOWABOUT_H
3 #define SHOWABOUT_H
4
5 #include <qwidget.h>
6
7 class ShowAbout: public QWidget
8 {
9 Q_OBJECT
10 public:
11 ShowAbout(QWidget *parent=0,const char *name=0);
12 private slots:
13 void emptyAbout();
14 void simpleAbout();
15 void kdeStandardAbout();
16 void appStandardAbout();
17 };
18
19 #endif


这个类的唯一用途就是弹出要求显示的对话框,因此只有一个构造函数和将被四个按钮使用的slot。每一个slot都弹出不同版本的About对话框。
ShowAbout

1 /* showabout.cpp */
2 #include <kapp.h>
3 #include <qpushbutton.h>
4 #include <qlayout.h>
5 #include <kaboutdialog.h>
6 #include <kcmdlineargs.h>
7 #include “showabout.h”
8
9 int main(int argc,char **argv)
10 {
11 KCmdLineArgs::init(argc,argv,”showabout”,
12 “About Boxes”,”0.0”);
13 KApplication app;
14 ShowAbout showabout;
15 showabout.show();
16 app.setMainWidget(&showabout);
17 return(app.exec());
18 }
19
20 ShowAbout::ShowAbout(QWidget *parent,const char *name)
21 : QWidget(parent,name)
22 {
23 QPushButton *button;
24 QVBoxLayout *box = new QVBoxLayout(this);
25
26 button = new QPushButton(“Empty”,this);
27 box->addWidget(button);
28 connect(button,SIGNAL(clicked()),
29 this,SLOT(emptyAbout()));
30
31 button = new QPushButton(“Simple”,this);
32 box->addWidget(button);
33 connect(button,SIGNAL(clicked()),
34 this,SLOT(simpleAbout()));
35
36 button = new QPushButton(“KDE Standard”,this);
37 box->addWidget(button);
38 connect(button,SIGNAL(clicked()),
39 this,SLOT(kdeStandardAbout()));
40
41 button = new QPushButton(“App Standard”,this);
42 box->addWidget(button);
43 connect(button,SIGNAL(clicked()),
44 this,SLOT(appStandardAbout()));
45
46 resize(10,10);
47 box->activate();
48 }
49 void ShowAbout::emptyAbout()
50 {
51 KAboutDialog *about = new KAboutDialog(0,”about”);
52 about->exec();
53 }
54 void ShowAbout::simpleAbout()
55 {
56 KAboutDialog *about = new KAboutDialog(0,”about”);
57
58 about->setCaption(“Simple About Configuration”);
59 about->setVersion(“Version 0.0.1”);
60
61 QPixmap logo;
62 if(logo.load(“tinylogo.png”))
63 about->setLogo(logo);
64
65 about->setAuthor(“Bertha D Blues”,
66 “bertha@belugalake.com”,
67 “http://www.belugalake.com”,
68 “Mallet Operator”);
69
70 about->setMaintainer(“Tony Stryovie”,
71 “stryovie@belugalake.com”,
72 “http://www.belugalake.com”,
73 “Finder of Lost Code”);
74
75 about->addContributor(“Walter Heater”,
76 “heat@belugalake.com”,
77 “http://www.belugalake.com”,
78 “Asker of Questions”);
79
80 about->exec();
81 }
82 void ShowAbout::kdeStandardAbout()
83 {
84 KAboutDialog *about = new KAboutDialog(
85 KAboutDialog::AbtKDEStandard,
86 “KDE Standard Configuration”,
87 KDialogBase::Ok | KDialogBase::Help,
88 KDialogBase::Ok,
89 this,
90 “about”,
91 TRUE);
92
93 about->setTitle(“The example that is all about About”);
94 about->setCaption(“KDE Standard About”);
95 about->setImage(“penguin1.png”);
96 about->setImageBackgroundColor(QColor(“red”));
97 about->setImageFrame(TRUE);
98
99 about->addTextPage(“Purpose”,
100 “This program is intended to provide an “
101 “example that\ndemonstrates how to use “
102 “the KAboutDialog.”);
103 about->addTextPage(“Version”,
104 “Version 0.0.1 pre-alpha experimental.\n”
105 “Saturday, April 1, 2000”);
106
107 about->exec();
108 }
109 void ShowAbout::appStandardAbout()
110 {
111 KAboutDialog *about = new KAboutDialog(
112 KAboutDialog::AbtAppStandard,
113 “App Configuration”,
114 KDialogBase::Ok,
115 KDialogBase::Ok,
116 this,
117 “about”,
118 TRUE);
119
120 about->setTitle(“The example that is about About”);
121 about->setProduct(“ShowAbout”,
122 “0.0.1 Pre-Alpha”,
123 “Bertha D Blues”,
124 “Saturday, April 1, 2000”);
125
126 about->addTextPage(“Purpose”,
127 “This program is intended to provide an “
128 “example that\ndemonstrates how to use “
129 “the KAboutDialog.”);
130 about->addTextPage(“Version”,
131 “Version 0.0.1 pre-alpha experimental.\n”
132 “Saturday, April 1, 2000”);
133
134 about->exec();
135 }



第9行到第18行是主程序代码,创建了一个ShowAbout类的实例,将它插入到被用作主窗口的部件中,等待用户退出。
ShowAbout构造函数开始于第16行,将按钮组织到一个竖直框中。4个按钮中的每一个都和显示相应KAboutDialog版本的slot连接起来。
第49行的emptyabout()显示一个空的KAboutDialog,在这个默认版本中只显示出用来关闭对话框的OK按钮,以及通常用来存放应用程序logo图形的地址。在第51行创建的对话框是模式对话框,因此第52行调用的方法exec()直到用户关闭窗口才会返回。
第54行开始的simpleAbout() slot使用了与第52行创建空的KAboutDialog相同的构造函数,调用KAboutDialog的方法插入可显示的信息。第58行调用setCaption()定义了窗口标题栏的标题,setVersion()调用指定了准备插入到窗口上部的避而不版本号。
第61行创建了QPixmap,用来从第62行名为tinylogo.png的文件中载入图像信息,第63珩调用setLogo()将图像设置为logo,显示在窗口的左上角。
第65行到第78行通过调用setAuthor(), set Maintainer()和saddContributer()增加了姓名和地址。只能有一个作者和一个维护者,但可以有任意多个捐献者。尽管插入 这些名字有不同的方法,但所有方法都具有一套相同的参数。第1 个字符串是姓名,第2项是这个人的URL,第3项是E-mail地址,三而言项是这个人在开发组中担任的工作。一旦显示出来,URL和EMAIL地址都会激活的--也就是说,可以点击地址向它们发送email或者登录到他们的主页。
第82行开始 的kdeStandardAbout() slot使用构造函数II来创建定制的对话框,第85行的AbtKDEStandard标志设定指定了使用哪些单元来组成这个对话框。第87行的参数告诉上一级类KDialogBase显示哪些按钮。在这个例子中,有OK按钮,它将自动关闭窗口;还有HELP标签。第88行指定的按钮是指在对话框刚一打开时就要被选择的按钮。
第93行调用setTitle()是必要的,因为标志设置包含了AbtTitle,需要提供用于显示的标题。第94行的调用setCaption是一个传递给上一级用的调用,设置上部分标题栏的标题文本 第95行到第97行的方法调用了指定了包含将要用作logo的图像的文件名:背景颜色被添充在图像背后;不管图像周围是否画有边框,背景颜色将添充窗口不能填充的任意区域,而且也可以填充图像中所有的透明部分。默认的是有图像画有功能,但方法setImageFrame()可以把边框去掉。
addTextPage()可以使用很多次--用来增加到标签窗口中的每一页内容。由程序中的第99行和第193行可以看出,只有参数是字符串,它将成为标签的名字,而文本将成为页面中的文本内容,在文本有很多格式的时候,需要插入翻页符"\n",回到偶文本的格式,
窗口上边的文本,是由两个方法调用设置产生的。第116页调用setTitle设置标题栏文本将显示在上边的中央,在第121行调用setProduct()设置其它的文本。这两个标签页是通过第126行和第130行的调用addTextPage()加入的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线longshao5937
只看该作者 1楼 发表于: 2008-09-22
.
我要抢沙发啦~~































凡事皆有两面性,换个角度想也许心境豁然开朗!!wps2007江民繁体字转换office2003翻译软件
快速回复
限100 字节
 
上一个 下一个