具有自己的QTimer和QThread的

具有自己的QTimer和QThread的

我想为机器人传感器的某些项目创建一个具有自己的QTimer和QThread的类。经过一番搜索,这就是我想出的

#include <QCoreApplication>
#include <QTimer>
#include <QThread>
#include <QObject>
#include <QDebug>


//#####################( Robot Class  )#########################3

class Robot : public QObject
{
public:
    Robot(QObject *parent = 0);
    ~Robot();

private:
    QTimer  *mQTimer;
    QThread *mQThread;

public slots:
    void update();

};

Robot::Robot(QObject *parent)
    : QObject(parent)
{
     mQTimer = new QTimer(0);
    mQThread = new QThread(this);

    mQTimer->setInterval(1);
    mQTimer->moveToThread(mQThread);

    connect(mQTimer, SIGNAL(timeout()), this, SLOT(update()));
    connect(mQThread, SIGNAL(started()), mQTimer, SLOT(start()));

   mQThread->start();
   //mQTimer->start();

}

Robot::~Robot()
{
    delete mQTimer;
    delete mQThread;
}

void Robot::update()
{
    qDebug() << "Robot is updating ...";
}

//##################( Main )###########################
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Robot *myRobot = new Robot(0);

    return a.exec();
}


我收到这个错误

QObject::connect: No such slot QObject::update() in ..\untitled1\main.cpp:34
QObject::connect: No such slot QObject::update() in ..\untitled1\main.cpp:34

最佳答案

您在类中缺少Q_OBJECT宏,还请尝试避免这样命名方法,因为您可以将其与Qt方法名称混合使用。还要为您创建的每个类创建其他头文件和cpp文件,在这种情况下,请创建robtot.h和robot.cpp。

class Robot : public QObject
{
Q_OBJECT
public:
    Robot(QObject *parent = 0);
    ~Robot();
...

关于c++ - 具有自己的QTimer和QThread的自定义类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31519881/

10-13 09:21