目前我们已经有了第一个 hello-qt 程序,它能在屏幕上创建一个窗口,显示 “Hello, Qt!”字符。但是它不能响应用户的操作,我们来将 hello-qt 修改一下,用 QPushButton 替换 QLabel。然后将这个 QPushButton 对象与主程序的退出操作[1]连接在一起,当我们点击 QButton 对象的时候,主程序退出。
依然在 hello-qt 项目文件夹中,将 main.cpp 的源码修改成下面的样子:
1 2 3 4 5 6 7 8 9 10 11 12 | #include <QApplication> #include <QPushButton> int main(int argc, char*argv[]) { QApplication app(argc, argv); QPushButton button("Hello, Qt!"); QObject::connect(&button, SIGNAL(clicked()), &app, SLOT(quit()) ); button.show(); return app.exec(); } |
由于项目没有新增文件,就不需要改动 hello-qt.pro 的内容了,这次编译只需运行两条命令
1 2 | qmake
make |
然后运行 ./hello-qt,你会看到程序运行的界面。
跟早前的 hello-qt 相比,按钮版的 hello-qt 还多了一个特性:当你按下这个 “Hello, Qt!” 按钮之后,程序退出了。
你应该发现了,这其中的奥秘就是新增的一个代码行:
8 9 | QObject::connect(&button, SIGNAL(clicked()), &app, SLOT(quit()) ); |
QObject::connect() 方法在 Qt 中用于将 QObject 对象的“信号”和“槽”(signal-slot)连接起来,信号和槽将会在 3.5 信号-槽机制中讲解。
当前这句 connect 语句的意义是:当 button 发出 clicked() 信号的时候,触发 app 对象的 quit() 操作。那么什么时候 button 会发出 clicked() 信号呢?顾名思义,就是界面上的 button 按钮被用户点击的时候。
下一节开始讲解 Qt 中的 QObject 和信号-槽机制,理解了这两个概念,就会对 Qt 中的对象通信、操作响应有了清晰的印象。
————————————————
[1] 稍后你会知道这在 Qt 中称为“槽”

