因此,我们要实现⼀个 GUI 程序,重要的是准备界⾯和写处理函数。
QT 中的事件和处理函数
在 QT 中,有 Signal、Slot 和 connect 的概念,其中 Signal 和 Slot 对应着前⾯的 Event 和 Event
Handler, connect 则将两者进⾏绑定。
Practice 1
请阅读给出的代码和注释,将其运⾏起来
Practice 2:增加秒针
1. 将分针的颜⾊改为蓝⾊
2. 增加秒针,颜⾊为红⾊,⻓度⼤于分针⻓度,形状为任意四边形
请注意,你的程序是写给⽤户的,因此不要只为了完成作业⽽脱离实际,请考虑让⽤户能看懂这个是秒针
// 为事件绑定处理函数,这部分往往和准备界⾯是混在⼀起的
// 这⾥单独提出来,主要是为了突出事件和处理函数的重要性
bind_handlers_to_events();
// 开始进⼊主循环,只要程序不退出,该循环不会退出
for (;;) {
// 等待⼀个事件发⽣
event = wait_for_event();
// 获取绑定在该事件上的处理函数
handlers = get_handlers(event);
// 调⽤这些绑定在事件上的处理函数
for (handler in handlers) {
handler();
}
}
return 0;
}
// ⼀个 Label 实例,类似于⽂本框,但是只⽤来显示⽂字,⽤户不能修改其中的内容
QLabel *label = new QLabel;
// ⼀个滚动条实例
QScrollBar *scrollBar = new QScrollBar;
// 下⾯的这个 connect 增加了这条绑定关系:
// 当这个滚动条上发⽣了 valueChanged(int) 这个事件的时候(也就是滚动条被拖动的时候),
// label 对象上的 setNum(int) 函数被调⽤
// 最后的效果,是⽤户拖动滚动条,label ⾥⾯会动态显示当前滚动条的位置(⼀个数字)
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
label, SLOT(setNum(int)));
评论0