目录
1,QLCDNumber的说明
2,QLCDNumber的运用
1,QLCDNumber的说明
QLCDNumer 是一个专门用来显示数字的控件。它类似于 "老式计算器" 的效果。它的核心属性如下:
2,QLCDNumber的运用
定时器
运用QLCDNumber,往往可能会用到定时器。定时器(Timer)是一种用于安排函数在未来某个时间点执行的机制。它们特别适用于需要定期执行某些任务的情况。
QTimer是 Qt 中最常用的定时器类。该类创建出来的对象,会产生一个 timeout 这样的信号。该信号可以通过 start 方法来开启定时器,并且参数中设定触发 timeout 信号的周期。
定时器的基本使用步骤如下:
创建一个 QTimer 实例:
QTimer* timer = new QTimer(this);
连接定时器的 timeout()
信号到槽函数:
当定时器超时时会发出 timeout()
信号,你可以将这个信号连接到你想要执行的槽函数上。
connect(timer, &QTimer::timeout, this, &Widget::handle);
启动定时器:
对于一次性定时器,使用 start(int msec)
方法指定毫秒数后启动定时器,之后它只会触发一次 timeout()
信号。
timer->start(1000); // 1秒后触发
停止定时器:
timer->stop();
下面来将 QLCDNumber 和QTimer 组合起来运用。
// 设置初始值
ui->lcdNumber->display("10");
// 创建timer定时器
timer = new QTimer(this);
// 把QTimer的timeout信号和自己的槽函数进行连接
connect(timer, &QTimer::timeout, this, &Widget::handle);
// 启动定时器,参数是触发timeout信号的周期,单位是ms(毫秒)
timer->start(1000);
void Widget::handle()
{
// 先拿到LCDNumber中的数字
int value = ui->lcdNumber->intValue();
if (value <= 0) {
// 数字减到0,停止定时器
timer->stop();
return;
}
ui->lcdNumber->display(value - 1);
}
注意:说到定时器可能会想到线程。对于GUI来说,它内部包含了很多隐藏功能,Qt为了保证修改界面的过程中,线程安全是不会受到影响的,所以Qt禁掉了其它线程直接修改界面。如下操作就会报错。
ui->lcdNumber->display("10");
std::thread t([this](){
int value = ui->lcdNumber->intValue();
while (true) {
std::this_thread::sleep_for(std::chrono::seconds(1));
if (value <= 0) break;
value -= 1;
ui->lcdNumber->display(value); // 该操作就是在修改界面
}
});
Qt 为了保证线程安全,直接要求所有的对界面的修改操作必须在主线程中完成。程序入口中的 a.exec 就会使主线程进入 “事件循环”。主线程就是专门负责GUI界面维护更新。