标题:【摘录】《KDE2/Qt编程金典》第四章:显示弹出式对话框——4.2 使用信号和slot
作者:XChinux
日期:2005-09-14 23:59
内容:
下面的例子使用QDialog作为基类,构建一个对话框,用于接收一个字符串;当选择OK(确定)或者Apply(应用)按钮的时候,字符串被传送给程序的主窗口,使用它作为标题栏的新标题。
Mainline
1 /* responder.cpp */
2 #include
3 #include “mainwidget.h”
4
5 int main(int argc,char **argv)
6 {
7 KApplication app(argc,argv,”responder”);
8 MainWidget mainwidget;
9 mainwidget.show();
10 app.setMainWidget(&mainwidget);
11 return(app.exec());
12 }
主程序相当简单。在第8行和第9行创建了MainWidget对象,在第10行将它设置为主窗口。
MainWidget Header
1 /* mainwidget.h */
2 #ifndef MAINWIDGET_H
3 #define MAINWIDGET_H
4
5 #include
6 #include
7
8 class MainWidget: public QWidget
9 {
10 Q_OBJECT
11 public:
12 MainWidget(QWidget *parent=0,const char *name=0);
13 private slots:
14 void popupEnterName();
15 void changeCaption(QString &);
16 };
17
18 #endif
这段程序是作为这个例子主窗口的部件的头文件。除了第12行的构造函数之外,这个类只包含了一对slot。命名为popupEnterName()的slot用于弹出对话框,命名为changeCaption()的slot改变部件的标题文本(也就是主窗口的标题)。
因为在这个类中有slot,因此必须使用宏Q_OBJECT作为类的第一个成员。Q_OBJECT中的定义允许头文件作为标准C++代码正常地进行编译,它插入一些Meta对象编译器(MOC)使用的专门信息,产生处理信号和slot所必需的代码。
MainWidget
1 /* mainwidget.cpp */
2 #include “mainwidget.h”
3 #include “entername.h”
4 #include
5
6 MainWidget::MainWidget(QWidget *parent,const char *name)
7 : QWidget(parent,name)
8 {
9 setMinimumSize(200,80);
10 setMaximumSize(200,80);
11
12 QPushButton *button =
13 new QPushButton(“Update Name”,this);
14 button->setGeometry(50,20,100,40);
15 connect(button,SIGNAL(clicked()),
16 this,SLOT(popupEnterName()));
17 }
18 void MainWidget::popupEnterName()
19 {
20 EnterName *dialog = new EnterName(0,”entername”);
21 connect(dialog,SIGNAL(captionString(QString &)),
22 this,SLOT(changeCaption(QString &)));
23 dialog->exec( ..