QThread
내에서 QTimer
을 사용하려고 시도했지만 QTimer
의 timeout()
슬롯에 연결할 수 없습니다.QTimer가 제한 시간 슬롯을 호출하지 않습니다
내가 뭘 잘못하고 있니? 여기
내 코드입니다 : 모든extern MainWindow *mainClass;
class myObj : public QObject
{
Q_OBJECT
public:
explicit myObj(QObject *parent = 0);
~myObj();
QThread workerThread;
int percent;
QTimer *percentTimer;
public slots:
void doWork();
void percentUpdate();
void startFunction();
signals:
void start();
void UpdateResult();
};
myObj::myObj(QObject *parent) : QObject(parent)
{
moveToThread(&workerThread);
connect(&workerThread, SIGNAL(finished()), this, SLOT(deleteLater()));
connect(this, SIGNAL(UpdateResult()), mainClass, SLOT(on_UpdateResult()));
connect(&workerThread, SIGNAL(started()), this, SLOT(doWork()));
connect(this, SIGNAL(start()), this, SLOT(startFunction()));
percent++;
percentTimer = new QTimer();
percentTimer->moveToThread(&workerThread);
percentTimer->setInterval(1000);
connect(percentTimer, SIGNAL(timeout()), this,SLOT(percentUpdate()));
}
myObj::~myObj() {
workerThread.quit();
workerThread.wait();
if (percentTimer) percentTimer->deleteLater();
}
void myObj::doWork()
{
emit start();
workerThread.exec();
}
void myObj::startFunction()
{
percentTimer->start();
QThread::sleep(60);
percentTimer->stop();
}
void myObj::percentUpdate()
{
qDebug() << "In Timer" << percent++;
emit UpdateResult();
}
디버거에서이 단계를 수행하면 어떻게됩니까? 먼저 각 메소드에 중단 점을 넣습니다. 어떤 사람이 어떤 순서로 부름 받았습니까? – MrEricSir
슬롯 percentUpdate를 제외하고는 모든 것이 잘 작동합니다. timeout @MrEricSir에서 호출되지 않습니다. –
@MrEricSir,'percentTimer-> moveToThread (...); '앞에 connect (percentTimer ...)를 시도하십시오. –