解决设备断开时,部分模态子窗口没有关闭的问题;

This commit is contained in:
yangjiaxuan 2024-05-20 15:48:49 +08:00
parent 397076c9d3
commit a70931d5c1
5 changed files with 98 additions and 21 deletions

View File

@ -30,6 +30,7 @@ Dialog_Add::Dialog_Add(SANE_Handle devHandle, class MainWindow *mainWnd, const s
m_formDeviceConfig = new Form_DeviceConfig(devHandle, m_scanParam.deviceConfigs, this);
connect(this, SIGNAL(closeDevice()), m_formDeviceConfig, SLOT(on_closeDevice()));
m_formSaveParam = new Form_SaveParam(m_scanParam.saveParam, this);
connect(this, SIGNAL(closeDevice()), m_formSaveParam, SLOT(on_closeDevice()));
ui->stackedWidget->addWidget(m_formDeviceConfig);
ui->stackedWidget->addWidget(m_formSaveParam);
ui->stackedWidget->setCurrentIndex(0);
@ -58,6 +59,7 @@ Dialog_Add::Dialog_Add(SANE_Handle devHandle, class MainWindow *mainWnd, const S
m_formDeviceConfig = new Form_DeviceConfig(devHandle, m_scanParam.deviceConfigs, this);
connect(this, SIGNAL(closeDevice()), m_formDeviceConfig, SLOT(on_closeDevice()));
m_formSaveParam = new Form_SaveParam(m_scanParam.saveParam, this);
connect(this, SIGNAL(closeDevice()), m_formSaveParam, SLOT(on_closeDevice()));
ui->stackedWidget->addWidget(m_formDeviceConfig);
ui->stackedWidget->addWidget(m_formSaveParam);
ui->stackedWidget->setCurrentIndex(0);

View File

@ -12,12 +12,12 @@
#include <QSpacerItem>
#include <QPushButton>
#include <QEvent>
#include <QMessageBox>
#include "lang/app_language.h"
Form_DeviceConfig::Form_DeviceConfig(SANE_Handle devHandle, const std::vector<DeviceConfig>& deviceConfigs, QWidget *parent)
: QWidget(parent)
, m_clrToolDlg(nullptr)
, m_qMessageBoxDlg(nullptr)
, m_devHandle(devHandle)
, m_defButtonId(-1)
{
@ -27,6 +27,7 @@ Form_DeviceConfig::Form_DeviceConfig(SANE_Handle devHandle, const std::vector<De
Form_DeviceConfig::~Form_DeviceConfig()
{
assert(nullptr == m_clrToolDlg);
assert(nullptr == m_qMessageBoxDlg);
}
std::vector<DeviceConfig> Form_DeviceConfig::GetDeviceConfigs()
@ -810,6 +811,16 @@ void Form_DeviceConfig::Update(int ignoreId)
}
}
void Form_DeviceConfig::PopupMsgBox(QString content)
{
assert(nullptr == m_qMessageBoxDlg);
m_qMessageBoxDlg = new QMessageBox(QMessageBox::Information, tr("Prompt"), content, QMessageBox::Ok, this);
m_qMessageBoxDlg->exec();
delete m_qMessageBoxDlg;
m_qMessageBoxDlg = nullptr;
}
bool Form_DeviceConfig::eventFilter(QObject *target, QEvent *event)
{
if (typeid(*target) == typeid(QSlider) || typeid(*target) == typeid(QComboBox) || typeid(*target) == typeid(QSpinBox) ||
@ -828,6 +839,8 @@ void Form_DeviceConfig::on_closeDevice()
{
if (nullptr != m_clrToolDlg)
m_clrToolDlg->reject();
if (nullptr != m_qMessageBoxDlg)
m_qMessageBoxDlg->reject();
}
void Form_DeviceConfig::on_defaultBtn_clicked()
@ -856,7 +869,10 @@ void Form_DeviceConfig::on_string_list_comboBoxClicked()
disconnect(comboBox, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_string_list_comboBoxClicked()));
comboBox->setCurrentText(QString::fromUtf8(v));
connect(comboBox, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_string_list_comboBoxClicked()));
QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported"));
QString content("The funtion is unsupported");
PopupMsgBox(content);
return;
}
@ -883,7 +899,10 @@ void Form_DeviceConfig::on_int_list_comboBoxClicked()
disconnect(comboBox, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_int_list_comboBoxClicked()));
comboBox->setCurrentText(QString::number(v));
connect(comboBox, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_int_list_comboBoxClicked()));
QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported"));
QString content("The funtion is unsupported");
PopupMsgBox(content);
return;
}
@ -910,7 +929,10 @@ void Form_DeviceConfig::on_double_list_comboBoxClicked()
disconnect(comboBox, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_double_list_comboBoxClicked()));
comboBox->setCurrentText(QString::number(SANE_UNFIX(v)));
connect(comboBox, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_double_list_comboBoxClicked()));
QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported"));
QString content("The funtion is unsupported");
PopupMsgBox(content);
return;
}
@ -945,7 +967,10 @@ void Form_DeviceConfig::on_int_sliderClicked(int value)
spinBox->setValue(v);
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(on_int_sliderClicked(int)));
connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(on_relate_spinBoxClicked(int)));
QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported"));
QString content("The funtion is unsupported");
PopupMsgBox(content);
return;
}
@ -980,7 +1005,10 @@ void Form_DeviceConfig::on_double_sliderClicked(int value)
doubleSpinBox->setValue(SANE_UNFIX(v));
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(on_double_sliderClicked(int)));
connect(doubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(on_relate_doubleSpinboxClicked(double)));
QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported"));
QString content("The funtion is unsupported");
PopupMsgBox(content);
return;
}
@ -1021,7 +1049,10 @@ void Form_DeviceConfig::on_string_comboBoxClicked()
disconnect(comboBox, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_string_comboBoxClicked()));
comboBox->setCurrentText(QString::fromUtf8(v));
connect(comboBox, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_string_comboBoxClicked()));
QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported"));
QString content("The funtion is unsupported");
PopupMsgBox(content);
return;
}
@ -1048,7 +1079,10 @@ void Form_DeviceConfig::on_spinBoxClicked(int value)
disconnect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(on_spinBoxClicked(int)));
spinBox->setValue(v);
connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(on_spinBoxClicked(int)));
QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported"));
QString content("The funtion is unsupported");
PopupMsgBox(content);
return;
}
@ -1083,7 +1117,10 @@ void Form_DeviceConfig::on_customGamma_checkedClicked()
button->setEnabled((bool)value);
connect(checkBox, SIGNAL(stateChanged(int)), this, SLOT(on_checkedClicked()));
connect(button, &QPushButton::clicked, this, &Form_DeviceConfig::on_customGammaBtn_clicked);
QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported"));
QString content("The funtion is unsupported");
PopupMsgBox(content);
return;
}
@ -1324,7 +1361,10 @@ void Form_DeviceConfig::on_checkedClicked()
disconnect(checkBox, SIGNAL(stateChanged(int)), this, SLOT(on_checkedClicked()));
checkBox->setCheckState(value ? Qt::Checked : Qt::Unchecked);
connect(checkBox, SIGNAL(stateChanged(int)), this, SLOT(on_checkedClicked()));
QMessageBox::information(this, tr("Prompt"), tr("The funtion is unsupported"));
QString content("The funtion is unsupported");
PopupMsgBox(content);
return;
}

View File

@ -4,6 +4,7 @@
#include <QWidget>
#include <string>
#include <vector>
#include <QMessageBox>
#include "base/HGDef.h"
#include "sane/sane_ex.h"
#include "sane/sane_option_definitions.h"
@ -122,6 +123,7 @@ public:
private:
void Init(const std::vector<DeviceConfig>& deviceConfigs);
void Update(int ignoreId);
void PopupMsgBox(QString content);
protected:
virtual bool eventFilter(QObject *target, QEvent *event) override;
@ -144,6 +146,7 @@ private slots:
private:
setPicClrTool *m_clrToolDlg;
QMessageBox *m_qMessageBoxDlg;
SANE_Handle m_devHandle;
int m_defButtonId;
std::vector<DeviceConfigsGroup> m_deviceConfigsGroups; // 当前配置信息

View File

@ -1,6 +1,5 @@
#include "form_saveparam.h"
#include "ui_form_saveparam.h"
#include <QFileDialog>
#include "base/HGDef.h"
#include "base/HGInc.h"
#include "base/HGUtility.h"
@ -9,6 +8,8 @@
Form_SaveParam::Form_SaveParam(const SaveParam &saveParam, QWidget *parent)
: QWidget(parent)
, ui(new Ui::Form_SaveParam)
, m_writeSettingsDlg(nullptr)
, m_qFileDialog(nullptr)
{
ui->setupUi(this);
@ -56,6 +57,8 @@ Form_SaveParam::Form_SaveParam(const SaveParam &saveParam, QWidget *parent)
Form_SaveParam::~Form_SaveParam()
{
assert(nullptr == m_writeSettingsDlg);
assert(nullptr == m_qFileDialog);
delete ui;
}
@ -200,27 +203,51 @@ int Form_SaveParam::getFormatIndex(const std::string &ext, bool ocr)
return 0;
}
void Form_SaveParam::on_closeDevice()
{
if (nullptr != m_writeSettingsDlg)
m_writeSettingsDlg->reject();
if (nullptr != m_qFileDialog)
m_qFileDialog->reject();
}
void Form_SaveParam::on_btn_directory_clicked()
{
QString save_dir = QFileDialog::getExistingDirectory(this, tr("Browse directory"), ui->lineEdit_directory->text());
if (!save_dir.isEmpty())
assert(nullptr == m_qFileDialog);
m_qFileDialog = new QFileDialog(this);
m_qFileDialog->setFileMode(QFileDialog::Directory);
m_qFileDialog->setViewMode(QFileDialog::Detail);
m_qFileDialog->setWindowTitle("Browse directory");
m_qFileDialog->setDirectory(ui->lineEdit_directory->text());
if (m_qFileDialog->exec())
{
if (save_dir[save_dir.size() - 1] != '/')
save_dir += "/";
QString save_dir = m_qFileDialog->directory().absolutePath();
if (!save_dir.isEmpty())
{
if (save_dir[save_dir.size() - 1] != '/')
save_dir += "/";
char result[512] = {0};
HGBase_StandardiseFileName(save_dir.toStdString().c_str(), result, 512);
ui->lineEdit_directory->setText(QString::fromStdString(result));
char result[512] = {0};
HGBase_StandardiseFileName(save_dir.toStdString().c_str(), result, 512);
ui->lineEdit_directory->setText(QString::fromStdString(result));
}
}
delete m_qFileDialog;
m_qFileDialog = nullptr;
}
void Form_SaveParam::on_btn_option_clicked()
{
Dialog_WriteSettings dlg(ui->cbox_format->currentIndex(), m_writeParam, this);
if (dlg.exec())
assert(nullptr == m_writeSettingsDlg);
m_writeSettingsDlg = new Dialog_WriteSettings(ui->cbox_format->currentIndex(), m_writeParam, this);
if (m_writeSettingsDlg->exec())
{
m_writeParam = dlg.GetWriteParam();
m_writeParam = m_writeSettingsDlg->GetWriteParam();
}
delete m_writeSettingsDlg;
m_writeSettingsDlg = nullptr;
}
void Form_SaveParam::on_cbox_format_currentIndexChanged(int index)

View File

@ -3,6 +3,7 @@
#include <QWidget>
#include <string>
#include <QFileDialog>
#include "dialog_writesettings.h"
namespace Ui {
@ -45,6 +46,8 @@ private:
int getFormatIndex(const std::string &ext, bool ocr);
private slots:
void on_closeDevice();
void on_btn_directory_clicked();
void on_btn_option_clicked();
@ -66,6 +69,8 @@ private slots:
private:
Ui::Form_SaveParam *ui;
WriteParam m_writeParam;
Dialog_WriteSettings *m_writeSettingsDlg;
QFileDialog *m_qFileDialog;
};
#endif // FORM_SAVEPARAM_H