Fix a UI block bug.
This commit is contained in:
@@ -94,7 +94,7 @@ void DeviceManager::initDevice() {
|
|||||||
{
|
{
|
||||||
lastStatus = SCANNING;
|
lastStatus = SCANNING;
|
||||||
previewing = true;
|
previewing = true;
|
||||||
timerID = startTimer(500);
|
// timerID = startTimer(500);
|
||||||
TRIGGER_EVENT(GUIEvents::ResponsePreview, nullptr, nullptr);
|
TRIGGER_EVENT(GUIEvents::ResponsePreview, nullptr, nullptr);
|
||||||
TRIGGER_EVENT(GUIEvents::InvokeOperationEnd, nullptr, nullptr);
|
TRIGGER_EVENT(GUIEvents::InvokeOperationEnd, nullptr, nullptr);
|
||||||
return;
|
return;
|
||||||
@@ -103,31 +103,32 @@ void DeviceManager::initDevice() {
|
|||||||
QString msg(inf.status!=READY?"Can't start preview,Device is not ready!":"Start preview operation fail!");
|
QString msg(inf.status!=READY?"Can't start preview,Device is not ready!":"Start preview operation fail!");
|
||||||
THROW_ERROR(msg);
|
THROW_ERROR(msg);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
previewDataCaller = QThread::create([=](){
|
||||||
|
while (!endLoop)
|
||||||
|
{
|
||||||
|
QThread::msleep(500);
|
||||||
|
if (!previewing) continue;
|
||||||
|
const char * data = GetPreviewData();
|
||||||
|
QByteArray bytes =QByteArray::fromRawData(data,140*140);
|
||||||
|
if (!previewing) continue;
|
||||||
|
TRIGGER_EVENT(GUIEvents::ResponsePreviewData, nullptr, (QObject*)(&bytes));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
previewDataCaller->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceManager::timerEvent(QTimerEvent *event) {
|
void DeviceManager::timerEvent(QTimerEvent *event) {
|
||||||
if (event->timerId() !=deviceInfTimerID)
|
if (event->timerId() !=deviceInfTimerID)
|
||||||
{
|
{
|
||||||
StatusInfo inf = GetStatus();
|
StatusInfo inf = GetStatus();
|
||||||
printf("Timer request status, status:%s\r\n",getStatusString(inf.status));
|
// printf("Timer request status, status:%s\r\n",getStatusString(inf.status));
|
||||||
if (inf.status==SCANNING)
|
if (inf.status==SCANNING)
|
||||||
{
|
{
|
||||||
lastStatus = SCANNING;
|
lastStatus = SCANNING;
|
||||||
//normal scan
|
//normal scan
|
||||||
if(!previewing)
|
QVariant var(inf.progress);
|
||||||
{
|
TRIGGER_EVENT(GUIEvents::InvokeOperationProgress, nullptr, (QObject*)&var);
|
||||||
QVariant var(inf.progress);
|
|
||||||
TRIGGER_EVENT(GUIEvents::InvokeOperationProgress, nullptr, (QObject*)&var);
|
|
||||||
}
|
|
||||||
//preview scan
|
|
||||||
else{
|
|
||||||
const char * data = GetPreviewData();
|
|
||||||
if (!data) return;
|
|
||||||
QByteArray bytes =QByteArray::fromRawData(data,140*140);
|
|
||||||
TRIGGER_EVENT(GUIEvents::ResponsePreviewData, nullptr, (QObject*)(&bytes));
|
|
||||||
// delete [] data;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else{
|
} else{
|
||||||
if (lastStatus == SCANNING && !errorOccured)
|
if (lastStatus == SCANNING && !errorOccured)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#define GUI_DEVICEMANAGER_H
|
#define GUI_DEVICEMANAGER_H
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QThread>
|
||||||
class DeviceManager:public QObject {
|
class DeviceManager:public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -25,7 +26,9 @@ private:
|
|||||||
int deviceInfTimerID = -1;
|
int deviceInfTimerID = -1;
|
||||||
int lastStatus=-1;
|
int lastStatus=-1;
|
||||||
bool previewing = false;
|
bool previewing = false;
|
||||||
|
bool endLoop = false;
|
||||||
bool errorOccured = false;
|
bool errorOccured = false;
|
||||||
|
QThread* previewDataCaller;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user