https://www.cnblogs.com/foohack/p/7449614.html
2、鬼馬行天
https://blog.csdn.net/hanshuobest/article/details/51494743
3、嚇人的猿
https://blog.csdn.net/qq769651718/article/details/79357933
4、一去丶二三裏
https://blog.csdn.net/liang19890820/article/details/51789796
正文:
首先,先進行關於將問題說明,我要解決的是在顯示界面中一個label控件中顯示一個NG,但是沒有一個合適的信號去把他置回。而後,還不能夠讓主線程給阻塞掉。
看到論壇中有這樣的一個方法:
1、第一種,阻塞主線程,最簡單的延時方法就是使用QThread類的sleep(n)、msleep(n)、usleep(n)
QThread::msleep(50);//阻塞延時50ms
2、第二種,不阻塞主線程
void Delay_MSec(unsigned int msec)
{
QTime _Timer = QTime::currentTime().addMSecs(msec);
while( QTime::currentTime() < _Timer )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
我的解決辦法:就還是想着將QTimer放在子線程中。
之前做過一個小的Demo,如果線程阻塞會出現主界面不能夠點擊任何的空間,也就會阻塞主線程。
隨便打開一個例程:
添加一個類,將其準備做成子線程。
//mytest.h
#ifndef MYTEST_H
#define MYTEST_H
#include <QTimer>
#include <QObject>
class Mytest : public QObject
{
Q_OBJECT
public:
Mytest();
signals:
void send_test();
public slots:
void dataCollectionSendTask();
private:
QTimer m_task_timer;
};
#endif // MYTEST_H
mytest.cpp
#include "mytest.h"
Mytest::Mytest()
{
//m_task_timer.setInterval(5000);
m_task_timer.singleShot(5000, this, SLOT(dataCollectionSendTask()));
// connect(&m_task_timer, SIGNAL(timeout()), this, SLOT(dataCollectionSendTask()));
// m_task_timer.start();
}
void Mytest::dataCollectionSendTask()
{
emit send_test();
//調用網絡接口發送採集完成的數據,發送的服務器
}
在主界面中的操作,實例化類對象:
給出的效果就是,程序運行5s後,會將label->setText("12345678");且不會阻塞線程
end