将错误与Qthreads链接

时间:2016-10-20 14:23:29

标签: c++ multithreading qt

嘿我正在尝试用Qthread做这个基本程序。我有链接错误,不知道如何解决它。 在main方法中,我调用了操作,它给了我这个错误:

  

main.obj:-1:错误:LNK2019:Verweis aufnichtaufgelöstesexternes   符号“”public:void __thiscall Controller :: operate(void)“   (?操作@Controller @@ QAEXXZ)“在Funktion”_main“。

#include <QCoreApplication>
#include <QThread>
#include <QDebug>


class Worker : public QObject
{
    Q_OBJECT

public slots:
    void doWork() {
        QString result;

        for(int i= 0; i<10;i++){

           qDebug() << i <<endl;
           this->thread()->sleep(2);
        }

        emit resultReady(result);
    }

signals:
    void resultReady(const QString &result);
};



class Controller : public QObject
{
    Q_OBJECT
    QThread workerThread;
public:
    Controller() {
        Worker *worker = new Worker;
        worker->moveToThread(&workerThread);
        connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
        connect(this, &Controller::operate, worker, &Worker::doWork);
        connect(worker, &Worker::resultReady, this, &Controller::handleResults);
        workerThread.start();
    }
    ~Controller() {
        workerThread.quit();
        workerThread.wait();
    }
    public slots:
    void handleResults(const QString &);
    signals:
    void operate();
    void display(){
        qDebug() << "DISPLAYING";

        };
    };




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

    Controller *c;

    c->operate();

   for(int i= 0; i<10;i++){

    c->display();
    a.thread()->sleep(1);

     }


      return a.exec();
   }

你知道它可能是什么吗?

1 个答案:

答案 0 :(得分:0)

通过将其称为函数,您不会发出信号。这将尝试调用没有的operate()的实现。

发出信号使用

emit c->operate(); //does not work with qt4. use implementation below

虽然这有效但Qt建议只发出来自类内部的信号。所以你应该在类中有一个函数调用像

这样的信号
class Controller : public QObject
{
//...
    void startWork() { emit operate(); }
//...
};