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

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();
}
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)

View File

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

View File

@ -86,6 +86,7 @@ MainWindow::MainWindow(const QString& appLang, QWidget *parent)
, m_bSideEditing(false)
, m_ocrMsgPump(NULL)
, m_ocrThread(NULL)
, m_dsEnabled(false)
{
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(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), 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)
checkRollerLife();
@ -432,6 +434,7 @@ MainWindow::~MainWindow()
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(scanFinishEvent()), this, SLOT(on_scanFinishEvent()));
disconnect(m_devUser, SIGNAL(closeDSReq()), this, SLOT(on_closeDSReq()));
delete m_devUser;
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()
{
int mainWndWidth = this->rect().width();
@ -3312,12 +3320,20 @@ void MainWindow::on_act_about_triggered()
void MainWindow::on_act_scannerSettings_triggered()
{
if (nullptr == m_devUser)
if (nullptr == m_devUser || m_dsEnabled)
{
return;
}
m_dsEnabled = true;
qDebug("m_devUser->ShowSettingDlg()");
HGResult ret = m_devUser->ShowSettingDlg();
if (HGBASE_ERR_OK != ret)
{
m_dsEnabled = false;
}
bool deviceIsOnline = 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(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()));
disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()));
disconnect(m_devUser, SIGNAL(closeDSReq()), this, SLOT(on_closeDSReq()));
m_devUser->Logout();
delete m_devUser;
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(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()));
disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()));
disconnect(m_devUser, SIGNAL(closeDSReq()), this, SLOT(on_closeDSReq()));
m_devUser->Logout();
delete m_devUser;
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(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), 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)
checkRollerLife();
#endif

View File

@ -146,6 +146,7 @@ private slots:
void on_abnormalImage(void *image, HGUInt *result);
void on_scanFinishEvent();
void on_scanWorkingEvent();
void on_closeDSReq();
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_finish(bool ok);
@ -277,6 +278,7 @@ private:
bool m_canClose;
DeviceUserMgr *m_devUserMgr;
DeviceUser *m_devUser;
bool m_dsEnabled;
QAction *m_act_acquireInto2;
QComboBox *m_cbtn_acquireIntoCfg;
QString m_currLang;

View File

@ -37,6 +37,7 @@ typedef struct
#define HGTWAIN_EVENT_TYPE_WORKING 1L
#define HGTWAIN_EVENT_TYPE_SCANFINISHED 2L
#define HGTWAIN_EVENT_TYPE_CLOSEDSREQ 3L
#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)
{
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);
}
}
}
}