如何利用QT定时器和信号发送获取窗口打开时间

QT内部类自带定时器,我们可以在窗口类内定义。窗口打开的时候开始计时,时间到了发送信号,获取时间信息并且显示在窗口标题上。效果如下:

1ec7eecf6dc843b7a3390ee128c92d59.png

源代码如下:

//这串代码在假定你已经定义好一个窗口对象后,在窗口对象类内进行的一些操作
#include <QTimer> //在窗口类内包含定时器的头文件
//在窗口类内定义的一些成员
class TiShow : public QDialog
{
    private:
    QTimer * m_timer; 
    int m_timerGo;
    int m_hour;
    private slots:
    void m_freshtime();
}
//在窗口类内定义的函数
void TiShow::init_Timer()
{
    m_timerGo = 0;
    m_timer = new QTimer(this);//以当前窗口作为它的父窗口,这样它发送信号的时候这个类就可以收到了
    m_timer->setInterval(1000);//设定1s发送一个timeout()信号,这里的填写单位是ms
    m_timer->start();//让定时器启动
    //将timeout信号连接一个槽,在槽里面获取时间数据并进行一些响应的操作,具体如何相应我们可以自
    //定义,例如让它作为窗口的标题显示考试时间,例如将它以qDebug()的形式响应出来
    connect(m_timer,SIGNAL(timeout()),this,SLOT(m_freshtime()));
}
TiShow::TiShow(QWidget *parent) :QDialog(parent) 
// 窗口类的构造函数,我们在这里面写一些启动以及初始化定时器的步骤
{
    init_Timer(); // 这里面主要给m_timer指针创建一个依赖于本窗口的对象,并且设定一些参数
}
//这里是响应timeout()信号的槽函数,在init_Timer()后,定时器会每一秒发送一个timeout信号
//与其连接的下面的槽函数会进行响应
void TiShow::m_freshtime()
{
    m_timerGo++;//每一秒加一次
    if(m_timerGo>=3600)//为了防止数据越界,每3600秒也就是一小时,就清零让小时+1
    {
               m_timerGo = 0;
                m_hour++;
    }
    //将时分秒三个数据包装成三个字符串类型的数据
    QString min = QString::number(m_timerGo/60);
    QString s = QString::number(m_timerGo%60);
    QString s_hour = QString::number(m_hour);
    //并将它写在窗口标题上,这样写出来就是上面的效果
    this->setWindowTitle("考试已用时"+s_hour+"时"+min+"分"+s+"秒");
}

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值