标签:定时器 Qt timerEvent ui MainWindow QTimer onTimerTimeout
QTimer和timerEvent是Qt中实现定时器的两种方法,定时器可以每隔一定时间执行指定操作。
QTimer用法
一个类中要执行多个定时操作,则定义多个QTimer变量即可。
//.h
private:
//定时器指针
QTimer *timer;
private slots:
void onTimerTimeout();
//.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建定时器
timer = new QTimer();
//设置定时器间隔超时间隔为1s
timer->setInterval(1000);
//超时信号 触发 槽函数onTimerTimeout
connect(timer, SIGNAL(timeout()), this, SLOT(onTimerTimeout()));
timer->start();
}
MainWindow::~MainWindow()
{
//停止定时器(此处也可不写,销毁定时器时自动停止且不会有警告和错误)
timer->stop();
//销毁定时器
delete timer;
delete ui;
}
void MainWindow::onTimerTimeout()
{
qDebug() << "执行计时器";
}
若定时器只想执行一次,可以向下面这样写,这样可以不实例化QTimer变量
//.h
private slots:
void onTimerTimeout();
//.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//1s后执行1次onTimerTimeout
QTimer::singleShot(1000, this, SLOT(onTimerTimeout()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onTimerTimeout()
{
qDebug() << "执行计时器";
}
timerEvent用法
一个类中要执行多个定时操作,则定义多个int变量记录定时器id,在timerEvent中以id区分即可。
//.h中
//重写timerEvent函数
private:
void timerEvent(QTimerEvent *event);
//int变量,用于记录计时器id,并在timerEvent中以id区分
int timerId1;
int timerId2;
//.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//开启计时器
timerId1 = startTimer(1000);
timerId2 = startTimer(1000);
}
MainWindow::~MainWindow()
{
//杀死计时器
killTimer(timerId2);
killTimer(timerId1);
delete ui;
}
void MainWindow::timerEvent(QTimerEvent *event)
{
if (event->timerId() == timerId1)
{
qDebug() << "执行计时器1";
}
else if (event->timerId() == timerId2)
{
qDebug() << "执行计时器2";
}
}
标签:定时器,Qt,timerEvent,ui,MainWindow,QTimer,onTimerTimeout 来源: https://blog.csdn.net/qq_42283621/article/details/119297500
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。