解决双击设置按钮导致显示设置对话框的消息函数重入的问题

This commit is contained in:
luoliangyi 2023-12-02 16:29:10 +08:00
parent 66d28656cd
commit 4ce0b0cba1
6 changed files with 34 additions and 2 deletions

View File

@ -165,6 +165,11 @@ void HGAPI DeviceUser::DSEventFunc(HGTwainDS ds, HGUInt event, HGPointer param)
{ {
emit p->scanWorkingEvent(); emit p->scanWorkingEvent();
} }
else if (HGTWAIN_EVENT_TYPE_CLOSEDSREQ == event)
{
HGTwain_DisableDS(p->m_twainDS);
emit p->closeDSReq();
}
} }
HGUInt HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGUInt type, HGPointer param) HGUInt HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGUInt type, HGPointer param)

View File

@ -61,6 +61,7 @@ signals:
void newImage(void *image); void newImage(void *image);
void scanFinishEvent(); void scanFinishEvent();
void scanWorkingEvent(); void scanWorkingEvent();
void closeDSReq();
private: private:
QWidget *m_wnd; QWidget *m_wnd;

View File

@ -86,6 +86,7 @@ MainWindow::MainWindow(const QString& appLang, QWidget *parent)
, m_bSideEditing(false) , m_bSideEditing(false)
, m_ocrMsgPump(NULL) , m_ocrMsgPump(NULL)
, m_ocrThread(NULL) , m_ocrThread(NULL)
, m_dsEnabled(false)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -375,6 +376,7 @@ MainWindow::MainWindow(const QString& appLang, QWidget *parent)
connect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*)), Qt::BlockingQueuedConnection); connect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*)), Qt::BlockingQueuedConnection);
connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection); connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection);
connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection); connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection);
connect(m_devUser, SIGNAL(closeDSReq()), this, SLOT(on_closeDSReq()), Qt::QueuedConnection);
#if !defined(HG_CMP_MSC) #if !defined(HG_CMP_MSC)
checkRollerLife(); checkRollerLife();
@ -432,6 +434,7 @@ MainWindow::~MainWindow()
disconnect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*))); disconnect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*)));
disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent())); disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()));
disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent())); disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()));
disconnect(m_devUser, SIGNAL(closeDSReq()), this, SLOT(on_closeDSReq()));
delete m_devUser; delete m_devUser;
m_devUser = nullptr; m_devUser = nullptr;
} }
@ -1516,6 +1519,11 @@ void MainWindow::on_scanFinishEvent()
} }
} }
void MainWindow::on_closeDSReq()
{
m_dsEnabled = false;
}
void MainWindow::on_m_pbtn_push_clicked() void MainWindow::on_m_pbtn_push_clicked()
{ {
int mainWndWidth = this->rect().width(); int mainWndWidth = this->rect().width();
@ -3312,12 +3320,20 @@ void MainWindow::on_act_about_triggered()
void MainWindow::on_act_scannerSettings_triggered() void MainWindow::on_act_scannerSettings_triggered()
{ {
if (nullptr == m_devUser) if (nullptr == m_devUser || m_dsEnabled)
{ {
return; return;
} }
m_dsEnabled = true;
qDebug("m_devUser->ShowSettingDlg()");
HGResult ret = m_devUser->ShowSettingDlg(); HGResult ret = m_devUser->ShowSettingDlg();
if (HGBASE_ERR_OK != ret)
{
m_dsEnabled = false;
}
bool deviceIsOnline = true; bool deviceIsOnline = true;
bool openSucceed = true; bool openSucceed = true;
@ -4263,6 +4279,7 @@ void MainWindow::deleteDevUser()
disconnect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*))); disconnect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*)));
disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent())); disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()));
disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent())); disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()));
disconnect(m_devUser, SIGNAL(closeDSReq()), this, SLOT(on_closeDSReq()));
m_devUser->Logout(); m_devUser->Logout();
delete m_devUser; delete m_devUser;
m_devUser = nullptr; m_devUser = nullptr;
@ -4526,6 +4543,7 @@ void MainWindow::on_act_selectDevice_triggered()
disconnect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*))); disconnect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*)));
disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent())); disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()));
disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent())); disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()));
disconnect(m_devUser, SIGNAL(closeDSReq()), this, SLOT(on_closeDSReq()));
m_devUser->Logout(); m_devUser->Logout();
delete m_devUser; delete m_devUser;
m_devUser = nullptr; m_devUser = nullptr;
@ -4548,6 +4566,7 @@ void MainWindow::on_act_selectDevice_triggered()
connect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*)), Qt::BlockingQueuedConnection); connect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*)), Qt::BlockingQueuedConnection);
connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection); connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection);
connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection); connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection);
connect(m_devUser, SIGNAL(closeDSReq()), this, SLOT(on_closeDSReq()), Qt::QueuedConnection);
#if !defined(HG_CMP_MSC) #if !defined(HG_CMP_MSC)
checkRollerLife(); checkRollerLife();
#endif #endif

View File

@ -146,6 +146,7 @@ private slots:
void on_abnormalImage(void *image, HGUInt *result); void on_abnormalImage(void *image, HGUInt *result);
void on_scanFinishEvent(); void on_scanFinishEvent();
void on_scanWorkingEvent(); void on_scanWorkingEvent();
void on_closeDSReq();
void on_m_pbtn_push_clicked(); void on_m_pbtn_push_clicked();
void on_dialog_sideBar_applyToImage(HGImage img, int brightness, int contrast, double gamma, bool enhanceText); void on_dialog_sideBar_applyToImage(HGImage img, int brightness, int contrast, double gamma, bool enhanceText);
void on_dialog_sideBar_finish(bool ok); void on_dialog_sideBar_finish(bool ok);
@ -277,6 +278,7 @@ private:
bool m_canClose; bool m_canClose;
DeviceUserMgr *m_devUserMgr; DeviceUserMgr *m_devUserMgr;
DeviceUser *m_devUser; DeviceUser *m_devUser;
bool m_dsEnabled;
QAction *m_act_acquireInto2; QAction *m_act_acquireInto2;
QComboBox *m_cbtn_acquireIntoCfg; QComboBox *m_cbtn_acquireIntoCfg;
QString m_currLang; QString m_currLang;

View File

@ -37,6 +37,7 @@ typedef struct
#define HGTWAIN_EVENT_TYPE_WORKING 1L #define HGTWAIN_EVENT_TYPE_WORKING 1L
#define HGTWAIN_EVENT_TYPE_SCANFINISHED 2L #define HGTWAIN_EVENT_TYPE_SCANFINISHED 2L
#define HGTWAIN_EVENT_TYPE_CLOSEDSREQ 3L
#define HGTWAIN_IMAGE_TYPE_NORMAL 0L #define HGTWAIN_IMAGE_TYPE_NORMAL 0L

View File

@ -298,7 +298,11 @@ LRESULT CALLBACK HGTwainDSMImpl::NewWndProc(HWND hWnd, UINT msg, WPARAM wParam,
} }
else if (MSG_CLOSEDSREQ == twEvent.TWMessage) else if (MSG_CLOSEDSREQ == twEvent.TWMessage)
{ {
p->m_listDSImpl[i]->Disable(); if (p->m_listDSImpl[i]->m_eventFunc)
{
p->m_listDSImpl[i]->m_eventFunc((HGTwainDS)p->m_listDSImpl[i],
HGTWAIN_EVENT_TYPE_CLOSEDSREQ, p->m_listDSImpl[i]->m_eventParam);
}
} }
} }
} }