刚刚学习Qt,请教高手一个关于Qtimer的问题

时间:2022-03-02 20:40:26
想实现一个这样的功能:用lable 显示一个int 数字,每次Timerout 后就再重新在lable上随机显示另一个int

在实现的过程中:

#include "changevalue.h"

#include <QtGui>
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    changeValue w;
    w.show();
     QTimer * timer = new QTimer(w);
    connect( &timer, SIGNAL(timeout()), w, SLOT(changeVal()) );
    timer->start(100);

    return a.exec();
}
期中slot changeVal()是我自己写的,
void changeValue::changeVal()
{
 QLabel *lb=new QLabel;
 int str =rand()%100;
 lb->setNum(str);
     
}
但是出现了如下错误

no matching function for call to 'QTimer::QTimer(changeValue&)'    main.cpp    /changeValue    line 11    C/C++ Problem

no matching function for call to 'changeValue::connect(QTimer**, const char*, changeValue&, const char*)'    main.cpp    /changeValue    line 12    C/C++ Problem


怎么解决啊?谢谢帮忙解决一下!

12 个解决方案

#1


void changeValue::changeVal()

你把它 申明成 slot 了吗?

QTime 属于 QtCore 不是 QtGui
所以你还要加上 #include <QTimer>

#2


connect( timer, SIGNAL(timeout()), &w, SLOT(changeVal()) );

请仔细阅读connect函数。

#3


connect( timer, SIGNAL(timeout()), &w, SLOT(changeVal()) );

而且每次都new一个QLabel (QLabel *lb=new QLabel;),这样也不好的吧……

#4


还没来得及去学习

#5


引用 1 楼 dext 的回复:
void changeValue::changeVal()

你把它 申明成 slot 了吗?

QTime 属于 QtCore 不是 QtGui
所以你还要加上 #include <QTimer>


我申明成 slot了。
那个头文件也#include了...

#6


 QTimer * timer = new QTimer(w);
  connect( &timer, SIGNAL(timeout()), w, SLOT(changeVal()) );

QTimer指定父类的意义是什么?
connect方法中&timer和w这些参数有合适的重载吗?

#7


恩,学习了

#8


changeValue是类还是方法?

#9


changeValue的内容是什么,贴出来看看。

#10


引用 2 楼 cuzn1024 的回复:
connect( timer, SIGNAL(timeout()), &amp;w, SLOT(changeVal()) );

请仔细阅读connect函数。


貌似后面还需要填上ConnectionType, 可是我加上 w.connect(timer,SIGNAL(timeout()),SLOT(changeVal()),Qt::AutoConnection);后,结果也没有出现我预想的结果

#11


引用 8 楼 pywepe 的回复:
changeValue是类还是方法?


是我定义的类

#12


引用 9 楼 qter_wd007 的回复:
changeValue的内容是什么,贴出来看看。


#include "changevalue.h"
#include <QtGui>
#include<QtCore>
#include <QApplication>
#include <QLabel>
#include<ui_changevalue.h>
using namespace Ui;
changeValue::changeValue(QWidget *parent)
    : QWidget(parent)
{
ui.setupUi(this);
}

changeValue::~changeValue()
{

}
void changeValue::changeVal()
{

changeValueClass ui; //=new changeValueClass();
 QLabel *lb=ui.label;
 int str =rand()%100;
 lb->setNum(str);

}

#1


void changeValue::changeVal()

你把它 申明成 slot 了吗?

QTime 属于 QtCore 不是 QtGui
所以你还要加上 #include <QTimer>

#2


connect( timer, SIGNAL(timeout()), &w, SLOT(changeVal()) );

请仔细阅读connect函数。

#3


connect( timer, SIGNAL(timeout()), &w, SLOT(changeVal()) );

而且每次都new一个QLabel (QLabel *lb=new QLabel;),这样也不好的吧……

#4


还没来得及去学习

#5


引用 1 楼 dext 的回复:
void changeValue::changeVal()

你把它 申明成 slot 了吗?

QTime 属于 QtCore 不是 QtGui
所以你还要加上 #include <QTimer>


我申明成 slot了。
那个头文件也#include了...

#6


 QTimer * timer = new QTimer(w);
  connect( &timer, SIGNAL(timeout()), w, SLOT(changeVal()) );

QTimer指定父类的意义是什么?
connect方法中&timer和w这些参数有合适的重载吗?

#7


恩,学习了

#8


changeValue是类还是方法?

#9


changeValue的内容是什么,贴出来看看。

#10


引用 2 楼 cuzn1024 的回复:
connect( timer, SIGNAL(timeout()), &amp;w, SLOT(changeVal()) );

请仔细阅读connect函数。


貌似后面还需要填上ConnectionType, 可是我加上 w.connect(timer,SIGNAL(timeout()),SLOT(changeVal()),Qt::AutoConnection);后,结果也没有出现我预想的结果

#11


引用 8 楼 pywepe 的回复:
changeValue是类还是方法?


是我定义的类

#12


引用 9 楼 qter_wd007 的回复:
changeValue的内容是什么,贴出来看看。


#include "changevalue.h"
#include <QtGui>
#include<QtCore>
#include <QApplication>
#include <QLabel>
#include<ui_changevalue.h>
using namespace Ui;
changeValue::changeValue(QWidget *parent)
    : QWidget(parent)
{
ui.setupUi(this);
}

changeValue::~changeValue()
{

}
void changeValue::changeVal()
{

changeValueClass ui; //=new changeValueClass();
 QLabel *lb=ui.label;
 int str =rand()%100;
 lb->setNum(str);

}