在QDialog框内通过QLabel显示计时器

时间:2014-12-15 12:00:03

标签: c++ qt timer qt4

我正在制作一个小型GUI应用程序,我在其中创建了一个弹出对话框,提示用户按OK或CANCEL。如果用户按OK,则会保存一些更改,如果用户按CANCEL,则会丢弃更改。

现在,我想在QLabel对象内的对话框中放一个计时器,它将显示如下 -

enter image description here

在5秒内发送消息, 在4秒内发送消息, .. .. 在1秒内发送消息。

倒计时结束后,将考虑默认“确定”并保存所有更改。 如何在GUI应用程序上实现这样的视觉效果?我的意思是实现一个concole计时器很容易,但如何通过GUI屏幕可视化计时器???任何帮助...

1 个答案:

答案 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++11CONFIG += 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变量可能不可变