
Screenshot: Calling it Quits
文件:
•. t2.rb
第1章里面已经创建了一个窗口,那么现在呢,我们做些修改,使得,当用户要求这个程序退出时,它就退出。
我们还会使用一个比默认字体更诱人的字体。
require 'Qt4'
app = Qt::Application.new(ARGV)
quit = Qt::PushButton.new('Quit')
quit.resize(75, 30)
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
Qt::Object.connect(quit, SIGNAL('clicked()'), app, SLOT('quit()'))
quit.show()
app.exec()
quit = Qt::PushButton.new('Quit')
这次,这个按钮显示的是Quit,它也表达出了当用户单击这个按钮时程序会做的事。
quit.resize(75, 30)
我们为这个按钮设置了另一个尺寸,因为现在所用的文字内容比"Hello world!"短一点。我们还可以使用Qt::FontMetrics来设置一个刚好合适的尺寸,或者干脆就让Qt::PushButton自行选择一个合理的默认值。
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
这里,我们为按钮选择了一个新的字体,使用的是Times 字体族中的18 磅粗体。还可以改变整个程序的默认字体,所需要使用的函数就是Qt::Application::setFont()。
Qt::Object.connect(quit, SIGNAL('clicked()'), app, SLOT('quit()'))
Qt::Object::connect()可能是Qt 中最核心的特性了。注意,这里所使用的connect()是Qt::Object中的一个静态函数。不要将它与伯克利套接字库中的connect()函数混淆了。
这里对connect()的这个调用在两个Qt 对象(直接或间接继承Qt::Object的那些对象)之间建立了一个单向连接。每个Qt对象都可以拥有信号(signals)(用于向外发送消息)和信号槽(slots)(用于接收外部消息)。所有的部件都是Qt对象,因为它们继承了Qt::Widget,而这个东西又继承了Qt::Object。
这里,quit 的clicked()信号被连接到app 的quit()信号槽,所以,当用户点击这个按钮时,程序就退出了。
信号和信号槽文档中深入说明了这个主题。
当妳运行这个程序时,妳会看到一个比第1章中还小的窗口,其中有一个比第1章中还小的按钮。
尝试着改变这个窗口的大小。按那个按钮以关闭程序。
在Qt::PushButton中,是否还有别的可连接到quit 信号槽的信号呢?[提示:Qt::PushButton从Qt::AbstractButton继承得到了自身的大部分功能。]
未知美人
HxLauncher: Launch Android applications by voice commands