解决twainui里面窗口释放后野指针可能造成的风险
This commit is contained in:
parent
7117b9317d
commit
f5cfcf38b7
|
@ -79,9 +79,8 @@ int Manager::showSettingUi(bool qt, SANE_Handle device, HWND parent, LPSANEAPI a
|
|||
int Manager::showProgressUi(bool qt, HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify)
|
||||
{
|
||||
m_progressUiparent = parent;
|
||||
hg_settingdialog *settingDlg = hg_settingdialog::GetSettingDialog();
|
||||
if (nullptr != settingDlg)
|
||||
m_progressUiparent = (HWND)settingDlg->winId();
|
||||
if (nullptr != m_settingUi)
|
||||
m_progressUiparent = (HWND)m_settingUi->winId();
|
||||
m_progressUiCallback = callback;
|
||||
m_notify = notify;
|
||||
|
||||
|
@ -237,7 +236,7 @@ void Manager::on_createSettingUi(bool qt)
|
|||
};
|
||||
|
||||
if (m_settingUi == nullptr)
|
||||
m_settingUi = new hg_settingdialog(m_device, &m_api, m_with_scan, m_devName.c_str(), close_prog, qParent);
|
||||
m_settingUi = new hg_settingdialog(this, m_device, &m_api, m_with_scan, m_devName.c_str(), close_prog, qParent);
|
||||
m_settingUi->setModal(true);
|
||||
m_settingUi->show();
|
||||
}
|
||||
|
@ -267,7 +266,7 @@ void Manager::on_createProgressUi(bool qt)
|
|||
m_progressUiCallback = std::function<void(ui_result)>();
|
||||
};
|
||||
if (m_progressUi == nullptr)
|
||||
m_progressUi = new Dialog_progress_ui(close_prog, m_notify, qParent);
|
||||
m_progressUi = new Dialog_progress_ui(this, close_prog, m_notify, qParent);
|
||||
m_progressUi->setModal(true);
|
||||
m_progressUi->show();
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ private slots:
|
|||
void on_deleteMessageBoxUi();
|
||||
void on_deleteManager();
|
||||
|
||||
private:
|
||||
public:
|
||||
QTranslator m_translator;
|
||||
QTranslator m_translator_qt;
|
||||
int m_langCode;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#include "Manager.h"
|
||||
#include "dialog_progress_ui.h"
|
||||
#include "ui_dialog_progress_ui.h"
|
||||
#include "lang/app_language.h"
|
||||
|
@ -6,11 +7,10 @@
|
|||
#include <QTimer>
|
||||
#include <thread>
|
||||
|
||||
Dialog_progress_ui *Dialog_progress_ui::m_param = nullptr;
|
||||
|
||||
extern Manager* g_manager;
|
||||
static int imageRecivedCount = 0;
|
||||
|
||||
Dialog_progress_ui::Dialog_progress_ui(std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify, QWidget *parent) :
|
||||
Dialog_progress_ui::Dialog_progress_ui(class Manager *mgr, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::Dialog_progress_ui)
|
||||
, m_isScanning(false)
|
||||
|
@ -30,11 +30,10 @@ Dialog_progress_ui::Dialog_progress_ui(std::function<void (ui_result)> callback,
|
|||
ui->label_totalImgRecived->setVisible(false);
|
||||
ui->lineEdit_imgRecived->setText(QString::number(imageRecivedCount));
|
||||
|
||||
m_mgr = mgr;
|
||||
m_callback = callback;
|
||||
*notify = FuncNotify;
|
||||
|
||||
m_param = this;
|
||||
|
||||
m_timer = new QTimer(this);
|
||||
|
||||
connect(this, SIGNAL(scan_status(QString,bool)), this, SLOT(on_scan_status(QString,bool)), Qt::QueuedConnection);
|
||||
|
@ -44,7 +43,7 @@ Dialog_progress_ui::Dialog_progress_ui(std::function<void (ui_result)> callback,
|
|||
|
||||
Dialog_progress_ui::~Dialog_progress_ui()
|
||||
{
|
||||
m_param = nullptr;
|
||||
m_mgr->m_progressUi = nullptr;
|
||||
|
||||
imageRecivedCount = 0;
|
||||
|
||||
|
@ -120,7 +119,7 @@ void Dialog_progress_ui::on_image_recived()
|
|||
|
||||
void Dialog_progress_ui::FuncNotify(int event, void *msg, int flag)
|
||||
{
|
||||
Dialog_progress_ui *p = (Dialog_progress_ui *)m_param;
|
||||
Dialog_progress_ui *p = (Dialog_progress_ui *)g_manager->m_progressUi;
|
||||
if (nullptr == p)
|
||||
{
|
||||
return;
|
||||
|
|
|
@ -15,15 +15,12 @@ class Dialog_progress_ui : public QDialog
|
|||
|
||||
bool quit_ = false;
|
||||
public:
|
||||
explicit Dialog_progress_ui(std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify, QWidget *parent = nullptr);
|
||||
explicit Dialog_progress_ui(class Manager *mgr, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify, QWidget *parent = nullptr);
|
||||
~Dialog_progress_ui();
|
||||
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent *e) override;
|
||||
|
||||
private:
|
||||
static Dialog_progress_ui *m_param;
|
||||
|
||||
signals:
|
||||
void scan_status(QString finishInfo, bool isScanning);
|
||||
void scan_finish(int flag, QString finishInfo);
|
||||
|
@ -48,6 +45,7 @@ public:
|
|||
private:
|
||||
Ui::Dialog_progress_ui *ui;
|
||||
|
||||
class Manager *m_mgr;
|
||||
std::function<void (ui_result)> m_callback;
|
||||
QTimer *m_timer;
|
||||
bool m_isScanning;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#include "Manager.h"
|
||||
#include "hg_settingdialog.h"
|
||||
#include <QDebug>
|
||||
#include <QLatin1String>
|
||||
|
@ -15,10 +16,10 @@
|
|||
#include "dialog_device_scan.h"
|
||||
#include "app_cfg.h"
|
||||
#include "base/HGBase64.h"
|
||||
hg_settingdialog * hg_settingdialog::hg_setting_ui_ =NULL;
|
||||
|
||||
std::string hg_settingdialog::property_combox_data_type_ = "combox_value_type";
|
||||
|
||||
hg_settingdialog::hg_settingdialog(SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName,
|
||||
hg_settingdialog::hg_settingdialog(class Manager *mgr, SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName,
|
||||
std::function<void(ui_result)> callback, QWidget *parent)
|
||||
: QDialog(parent)
|
||||
, save_(false)
|
||||
|
@ -29,7 +30,7 @@ hg_settingdialog::hg_settingdialog(SANE_Handle handle, const SANEAPI* saneApi, b
|
|||
, m_devName(devName)
|
||||
, m_callback(callback)
|
||||
{
|
||||
hg_setting_ui_ = this;
|
||||
m_mgr = mgr;
|
||||
m_langCode = lang_get_cur_code_page();
|
||||
if (20127 == m_langCode)
|
||||
{
|
||||
|
@ -134,17 +135,12 @@ hg_settingdialog::~hg_settingdialog()
|
|||
|
||||
cur_scheme_->release();
|
||||
cur_cfg_->release();
|
||||
hg_setting_ui_ = NULL;
|
||||
m_mgr->m_settingUi = NULL;
|
||||
|
||||
if(!quit_)
|
||||
m_callback(UI_RESULT_CLOSE_SETTING);
|
||||
}
|
||||
|
||||
hg_settingdialog *hg_settingdialog::GetSettingDialog()
|
||||
{
|
||||
return hg_setting_ui_;
|
||||
}
|
||||
|
||||
void hg_settingdialog::initUi()
|
||||
{
|
||||
updateOpt();
|
||||
|
|
|
@ -47,12 +47,11 @@ class hg_settingdialog : public QDialog
|
|||
};
|
||||
|
||||
public:
|
||||
explicit hg_settingdialog(SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName,
|
||||
explicit hg_settingdialog(class Manager *mgr, SANE_Handle handle, const SANEAPI* saneApi, bool showScan, const char* devName,
|
||||
std::function<void(ui_result)> callback, QWidget *parent = nullptr);
|
||||
~hg_settingdialog();
|
||||
|
||||
public:
|
||||
static hg_settingdialog *GetSettingDialog();
|
||||
void initUi();
|
||||
void updateOpt();
|
||||
void createUI();
|
||||
|
@ -82,7 +81,7 @@ public:
|
|||
private:
|
||||
gb::sane_config_schm* m_scheme;
|
||||
|
||||
static hg_settingdialog *hg_setting_ui_;
|
||||
class Manager *m_mgr;
|
||||
SANEAPI m_saneAPI;
|
||||
SANE_Handle m_devHandle;
|
||||
bool m_showScan;
|
||||
|
|
Loading…
Reference in New Issue