按钮是一个部件,因此它可以像其它部件一样进行显示。但是,在用户点击按钮的时候你的程序必须知道并做出响应。下面的例子用于退出程序响应按钮动作。
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()方法。