解决三方软件showUI并且无进度指示器时,不会报错的问题

This commit is contained in:
yangjiaxuan 2023-11-30 17:59:02 +08:00
parent bc80b1ea74
commit f3989426bb
3 changed files with 25 additions and 19 deletions

View File

@ -83,8 +83,7 @@ hg_settingdialog::hg_settingdialog(class Manager *mgr, SANE_Handle handle, const
m_originGammaData = m_gammaData;
connect(comb_, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_current_scheme_changed()));
connect(this, SIGNAL(scan_start()),this, SLOT(on_scan_start()), Qt::QueuedConnection);
connect(this, SIGNAL(scan_finish()), this, SLOT(on_scan_finish()), Qt::QueuedConnection);
connect(this, SIGNAL(scan_status(QString,bool)),this, SLOT(on_scan_status(QString, bool)), Qt::QueuedConnection);
*notify = FuncNotify;
}
@ -191,13 +190,24 @@ void hg_settingdialog::FuncNotify(int event, void* msg, int flag)
{
case SANE_EVENT_WORKING:
{
emit p->scan_start();
QString finishInfo;
if (0 != flag)
{
finishInfo = (char*)msg;
}
emit p->scan_status(finishInfo, true);
}
break;
case SANE_EVENT_SCAN_FINISHED:
{
emit p->scan_finish();
QString finishInfo;
if (0 != flag)
{
finishInfo = (char*)msg;
}
emit p->scan_status(finishInfo, false);
}
break;
}
@ -1200,18 +1210,16 @@ void hg_settingdialog::updateUIStatus()
}
}
void hg_settingdialog::on_scan_start()
void hg_settingdialog::on_scan_status(QString info, bool status)
{
m_isScanning = true;
this->setEnabled(false);
setAttribute(Qt::WA_DeleteOnClose, false);
}
if (!info.isEmpty())
{
QMessageBox::information(this, tr("Prompt"), info);
}
void hg_settingdialog::on_scan_finish()
{
m_isScanning = false;
this->setEnabled(true);
setAttribute(Qt::WA_DeleteOnClose, true);
m_isScanning = status;
this->setEnabled(!status);
setAttribute(Qt::WA_DeleteOnClose, !status);
}
void hg_settingdialog::slot_checkedClicked()

View File

@ -137,12 +137,10 @@ private:
QVector<QWidget*> m_list_widgets;
signals:
void scan_start();
void scan_finish();
void scan_status(QString info, bool status);
private slots:
void on_scan_start();
void on_scan_finish();
void on_scan_status(QString info, bool status);
private slots:
void slot_checkedClicked();