嘿我正在尝试用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();
}
你知道它可能是什么吗?
答案 0 :(得分:0)
通过将其称为函数,您不会发出信号。这将尝试调用没有的operate()
的实现。
发出信号使用
emit c->operate(); //does not work with qt4. use implementation below
虽然这有效但Qt建议只发出来自类内部的信号。所以你应该在类中有一个函数调用像
这样的信号class Controller : public QObject
{
//...
void startWork() { emit operate(); }
//...
};