一个关于Qt定时器的问题
还有一个关于Qt的问题,关于多定时器的,举个例子,有两个单选框,选中第一个代表1000ms,选中第二个代表500ms,QTimer*t=newQTimer;connect...
还有一个关于Qt的问题,关于多定时器的,举个例子,有两个单选框,选中第一个代表1000ms,选中第二个代表500ms,QTimer* t = new QTimer;connect(t,signal(timeout()),this,slot(slotadd()));t->start(500);
slotadd()槽函数是用来对一个变量进行递增操作的,即每次都+1,然后将这个变量显示在一个lineEdit框上;开始的时候是每500ms调用一次槽函数,现在我想选中1000ms单选框,使得每1000ms调用槽函数一次,请问实现办法是什么?我试过用一个定时器实现,就是用t->setInterval(1000)来改变定时器的值,但没有成功,然后又用两个定时器来做,即关掉一个定时器,打开另一个定时器,但也没有效果,不知道是不是我某些函数用得不对,还是根本想法就错了。 展开
slotadd()槽函数是用来对一个变量进行递增操作的,即每次都+1,然后将这个变量显示在一个lineEdit框上;开始的时候是每500ms调用一次槽函数,现在我想选中1000ms单选框,使得每1000ms调用槽函数一次,请问实现办法是什么?我试过用一个定时器实现,就是用t->setInterval(1000)来改变定时器的值,但没有成功,然后又用两个定时器来做,即关掉一个定时器,打开另一个定时器,但也没有效果,不知道是不是我某些函数用得不对,还是根本想法就错了。 展开
1个回答
展开全部
只要一个定时器,思路没问题,代码如下,要工程留邮箱。
/////////////////////mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QTimer *timer;
int counter;
private slots:
void slotadd();
void on_radio500_clicked();
void on_radio1000_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
///////////////////mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
counter = 0;
timer = new QTimer();
timer->setInterval(500);
connect(timer,SIGNAL(timeout()),this,SLOT(slotadd()));
timer->start();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slotadd()
{
counter++;
if(counter >= 10000) counter = 0;
QString s;
s.sprintf("%d",counter);
ui->label->setText(s);
}
void MainWindow::on_radio500_clicked()
{
timer->setInterval(500);
}
void MainWindow::on_radio1000_clicked()
{
timer->setInterval(1000);
}
/////////////////////mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QTimer *timer;
int counter;
private slots:
void slotadd();
void on_radio500_clicked();
void on_radio1000_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
///////////////////mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
counter = 0;
timer = new QTimer();
timer->setInterval(500);
connect(timer,SIGNAL(timeout()),this,SLOT(slotadd()));
timer->start();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slotadd()
{
counter++;
if(counter >= 10000) counter = 0;
QString s;
s.sprintf("%d",counter);
ui->label->setText(s);
}
void MainWindow::on_radio500_clicked()
{
timer->setInterval(500);
}
void MainWindow::on_radio1000_clicked()
{
timer->setInterval(1000);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询