Multi thread error raise support

This commit is contained in:
Krad
2022-01-12 15:55:10 +08:00
parent f76758cbd2
commit 0edddd7b69
4 changed files with 20 additions and 5 deletions

View File

@@ -40,12 +40,15 @@ std::string getJsonFromPatInf(QObject* obj)
void ErrorCallback(const char * msg) void ErrorCallback(const char * msg)
{ {
DeviceManager::Default()->setErrorOccurred(true); DeviceManager::Default()->emitErrorCallback(msg);
printf("Error Callback , message:%s\r\n", msg);
QString m(msg);
THROW_ERROR(m);
} }
void DeviceManager::emitErrorCallback(const char *msg) {
this->setErrorOccurred(true);
printf("Error Callback , message:%s\r\n", msg);
QString m(msg);
emit raiseGlobalError( m);
}
void DeviceManager::initDevice() { void DeviceManager::initDevice() {

View File

@@ -22,6 +22,9 @@ public:
bool getErrorOccurred(){ bool getErrorOccurred(){
return errorOccurred; return errorOccurred;
} }
void emitErrorCallback(const char * msg);
signals:
void raiseGlobalError(QString msg);
protected: protected:
void timerEvent(QTimerEvent* event) override ; void timerEvent(QTimerEvent* event) override ;

View File

@@ -161,6 +161,7 @@ MainWindow::MainWindow(QWidget* parent) :
} }
qApp->processEvents(); qApp->processEvents();
}); });
connect(DeviceManager::Default(),&DeviceManager::raiseGlobalError,this,&MainWindow::triggerError,Qt::ConnectionType::QueuedConnection);
GUIErrorHandle::Default()->init(); GUIErrorHandle::Default()->init();
l = new LoginWindow(this); l = new LoginWindow(this);
QThread* t = QThread::create([]() { QThread* t = QThread::create([]() {
@@ -262,3 +263,9 @@ void MainWindow::debugConsoleOn() {
//clear buffer before redirect; //clear buffer before redirect;
this->console = text_edit; this->console = text_edit;
} }
void MainWindow::triggerError(const QString & msg) {
QString s(msg);
qDebug()<<"invoke trigger error slot msg:"<<msg;
EventCenter::Default()->triggerEvent(GUIErrorRaise, nullptr,(QObject*)&s);
}

View File

@@ -28,10 +28,12 @@ public:
void requestLogin(); void requestLogin();
QTextEdit* getEdit(); QTextEdit* getEdit();
void debugConsoleOn(); void debugConsoleOn();
public slots:
void triggerError(const QString&);
protected: protected:
void changeEvent(QEvent* event); void changeEvent(QEvent* event);
private: private:
void loadStyleSheet(const QString& sheetName); void loadStyleSheet(const QString& sheetName);
cJSON* json_root = nullptr; cJSON* json_root = nullptr;