• 9535阅读
  • 1回复

【摘录】《KDE2/Qt编程金典》第二章:创建并显示一个窗口——2.5 监控按钮 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 正序阅读 楼主  发表于: 2005-08-27
  按钮是一个部件,因此它可以像其它部件一样进行显示。但是,在用户点击按钮的时候你的程序必须知道并做出响应。下面的例子用于退出程序响应按钮动作。

1     /* exitbutton.cpp */
2     #include <qapplication.h>
3     #include <qpushbutton.h>
4     #include <qstring.h>
5
6     int main(int argc, char **argv)
7     {
8         QApplication app(argc, argv);
9         QString string("Exit");
10         QPushButton *button = new QPushButton(string, NULL);
11         QObject::connect(button,
12               SIGNAL(clicked()), &app, SLOT(quit()));
13         button->setGeometry(0, 0, 80, 50);
14         button->show();
15         app.setMainWidget(button);
16         return(app.exec());
17     }

  这个按钮准备响应鼠标事件,但如果这个按钮没有被编写成向程序的某部分发送消息,那么这个按钮将对鼠标没有任何反应。这种类型的消息之一是signal(信号),能够接收信号的方法叫做slot。在第10行和第11行调用QObject::connect()将把信号的一个拷贝从按钮的clicked()方法指向应用程序的quit()方法。
  注意:如果从事过其它事件驱动系统的开发,那么读者很可能熟悉“回调”函数的概念。slot类似于回调函数,但有一些不同。主要的差别是slot保证类型安全,即如果参数的类型不匹配,那么程序将不能编译。
  在调用QObject:connect()时,前两个参数指明了信号的来源为按钮中的clicked()方法。这个信号就被广播出去,这是无论普无设置接收它的slot函数,信号都将被发出。另一方面,如果几个slot都被设置成接收这个信号,那么它们都将收到一个信号的一个拷贝。
  在调用QObject::connect()中,后两个参数指明了接收的slot是QApplication对象中的quit()方法。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线mathbox

只看该作者 1楼 发表于: 2006-10-14
顶下天呐,感谢斑竹
快速回复
限100 字节
 
上一个 下一个