我正在制作一个小型GUI应用程序,我在其中创建了一个弹出对话框,提示用户按OK或CANCEL。如果用户按OK,则会保存一些更改,如果用户按CANCEL,则会丢弃更改。
现在,我想在QLabel对象内的对话框中放一个计时器,它将显示如下 -
在5秒内发送消息, 在4秒内发送消息, .. .. 在1秒内发送消息。
倒计时结束后,将考虑默认“确定”并保存所有更改。 如何在GUI应用程序上实现这样的视觉效果?我的意思是实现一个concole计时器很容易,但如何通过GUI屏幕可视化计时器???任何帮助...
答案 0 :(得分:6)
在构造函数中尝试:
mutable int sec = 5;//in header for example, we need mutable to use it in lambda
//...
ui->label->setText("Sending message in 5 secs");
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this,[=]() {
sec--;
if(!sec)
{
qDebug()<< "Ok";
timer->stop();//stop timer and do something
//Ok
}
else
ui->label->setText(QString("Sending message in %1 secs").arg(sec));
});
timer->start(1000);
我在这里使用C++11
(CONFIG += c++11
到.pro
文件)和new syntax of signals and slots,但当然如果需要,您可以使用旧语法。
Qt4
:
ui->label->setText("Sending message in 5 secs");
timer = new QTimer(this);//class member
connect(timer, SIGNAL(timeout()), this, SLOT(slot()));
timer->start(1000);
插槽:
sec--;
if(!sec)
{
qDebug()<< "Ok";
timer->stop();//stop timer and do something
//Ok
}
else
ui->label->setText(QString("Sending message in %1 secs").arg(sec));
sec
变量可能不可变