增加记住登录信息,测试中不能关闭

This commit is contained in:
yangjiaxuan 2022-12-29 17:54:32 +08:00
parent d326b6a3be
commit 0ad58aeafb
8 changed files with 202 additions and 75 deletions

View File

@ -124,22 +124,22 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="dialog_userinput.ui" line="133"/> <location filename="dialog_userinput.ui" line="160"/>
<source>OK</source> <source>OK</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="dialog_userinput.ui" line="140"/> <location filename="dialog_userinput.ui" line="167"/>
<source>Cancel</source> <source>Cancel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="dialog_userinput.cpp" line="73"/> <location filename="dialog_userinput.cpp" line="91"/>
<source>tips</source> <source>tips</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="dialog_userinput.cpp" line="73"/> <location filename="dialog_userinput.cpp" line="91"/>
<source>please input valid contents</source> <source>please input valid contents</source>
<translation></translation> <translation></translation>
</message> </message>
@ -545,88 +545,88 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="85"/> <location filename="form_maininterface.cpp" line="87"/>
<source>Device has connected</source> <source>Device has connected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="87"/> <location filename="form_maininterface.cpp" line="89"/>
<source>Device hasnot connected</source> <source>Device hasnot connected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="88"/> <location filename="form_maininterface.cpp" line="90"/>
<source>Device type:</source> <source>Device type:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="88"/> <location filename="form_maininterface.cpp" line="90"/>
<source> SerialNum:</source> <source> SerialNum:</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="88"/> <location filename="form_maininterface.cpp" line="90"/>
<source> connect status:</source> <source> connect status:</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="97"/> <location filename="form_maininterface.cpp" line="99"/>
<source>load last image which uploaded last time</source> <source>load last image which uploaded last time</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="154"/> <location filename="form_maininterface.cpp" line="161"/>
<location filename="form_maininterface.cpp" line="500"/> <location filename="form_maininterface.cpp" line="539"/>
<source>tips</source> <source>tips</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="187"/> <location filename="form_maininterface.cpp" line="179"/>
<source>yes</source> <source>yes</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="188"/> <location filename="form_maininterface.cpp" line="180"/>
<source>no</source> <source>no</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="269"/> <location filename="form_maininterface.cpp" line="288"/>
<source>ID</source> <source>ID</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="269"/> <location filename="form_maininterface.cpp" line="288"/>
<source>Test items</source> <source>Test items</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="269"/> <location filename="form_maininterface.cpp" line="288"/>
<source>status</source> <source>status</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="417"/> <location filename="form_maininterface.cpp" line="436"/>
<source>not test</source> <source>not test</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="417"/> <location filename="form_maininterface.cpp" line="436"/>
<source>not pass</source> <source>not pass</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="417"/> <location filename="form_maininterface.cpp" line="436"/>
<source>not support</source> <source>not support</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="417"/> <location filename="form_maininterface.cpp" line="436"/>
<source>pass</source> <source>pass</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="form_maininterface.cpp" line="500"/> <location filename="form_maininterface.cpp" line="539"/>
<source>no image</source> <source>no image</source>
<translation></translation> <translation></translation>
</message> </message>
@ -692,7 +692,7 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="376"/> <location filename="mainwindow.cpp" line="412"/>
<source>Account login elsewhere</source> <source>Account login elsewhere</source>
<translation></translation> <translation></translation>
</message> </message>
@ -701,94 +701,104 @@
<translation type="vanished"></translation> <translation type="vanished"></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="379"/> <location filename="mainwindow.cpp" line="415"/>
<source>You have been forced offline by the administrator account</source> <source>You have been forced offline by the administrator account</source>
<translation>线</translation> <translation>线</translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="382"/> <location filename="mainwindow.cpp" line="418"/>
<source>Data base error</source> <source>Data base error</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="325"/> <location filename="mainwindow.cpp" line="266"/>
<location filename="mainwindow.cpp" line="346"/> <location filename="mainwindow.cpp" line="361"/>
<location filename="mainwindow.cpp" line="362"/> <location filename="mainwindow.cpp" line="382"/>
<location filename="mainwindow.cpp" line="390"/> <location filename="mainwindow.cpp" line="398"/>
<location filename="mainwindow.cpp" line="407"/> <location filename="mainwindow.cpp" line="428"/>
<location filename="mainwindow.cpp" line="432"/> <location filename="mainwindow.cpp" line="446"/>
<location filename="mainwindow.cpp" line="436"/> <location filename="mainwindow.cpp" line="471"/>
<location filename="mainwindow.cpp" line="475"/>
<location filename="mainwindow.cpp" line="484"/>
<location filename="mainwindow.cpp" line="496"/>
<source>tips</source> <source>tips</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="326"/> <location filename="mainwindow.cpp" line="266"/>
<location filename="mainwindow.cpp" line="484"/>
<location filename="mainwindow.cpp" line="496"/>
<source>Is testing, do not close!</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="362"/>
<source>Are you sure to connect the new device</source> <source>Are you sure to connect the new device</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="328"/> <location filename="mainwindow.cpp" line="364"/>
<source>yes</source> <source>yes</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="329"/> <location filename="mainwindow.cpp" line="365"/>
<source>no</source> <source>no</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="346"/> <location filename="mainwindow.cpp" line="382"/>
<location filename="mainwindow.cpp" line="407"/> <location filename="mainwindow.cpp" line="446"/>
<source>cannot create more table</source> <source>cannot create more table</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="362"/> <location filename="mainwindow.cpp" line="398"/>
<source>The device has disconnected</source> <source>The device has disconnected</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="427"/> <location filename="mainwindow.cpp" line="466"/>
<source>save</source> <source>save</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="427"/> <location filename="mainwindow.cpp" line="466"/>
<source>xls(*.xls)</source> <source>xls(*.xls)</source>
<translation>xls表格(*.xls)</translation> <translation>xls表格(*.xls)</translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="432"/> <location filename="mainwindow.cpp" line="471"/>
<source>export succeed</source> <source>export succeed</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="436"/> <location filename="mainwindow.cpp" line="475"/>
<source>export failed</source> <source>export failed</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="458"/> <location filename="mainwindow.cpp" line="508"/>
<source>Illegal user</source> <source>Illegal user</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="462"/> <location filename="mainwindow.cpp" line="512"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="466"/> <location filename="mainwindow.cpp" line="516"/>
<source>Database error</source> <source>Database error</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="470"/> <location filename="mainwindow.cpp" line="520"/>
<source>connect error</source> <source>connect error</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="mainwindow.cpp" line="474"/> <location filename="mainwindow.cpp" line="524"/>
<source>Failed</source> <source>Failed</source>
<translation></translation> <translation></translation>
</message> </message>
@ -796,18 +806,19 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="hgscanner.cpp" line="42"/> <location filename="hgscanner.cpp" line="62"/>
<source>success: </source> <source>success: </source>
<oldsource>success</oldsource> <oldsource>success</oldsource>
<translation>: </translation> <translation>: </translation>
</message> </message>
<message> <message>
<location filename="hgscanner.cpp" line="44"/> <location filename="hgscanner.cpp" line="47"/>
<location filename="hgscanner.cpp" line="64"/>
<source>failed: </source> <source>failed: </source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="hgscanner.cpp" line="50"/> <location filename="hgscanner.cpp" line="40"/>
<source>Not find test item</source> <source>Not find test item</source>
<translation></translation> <translation></translation>
</message> </message>

View File

@ -23,17 +23,21 @@ Dialog_logIn::Dialog_logIn(QWidget *parent) :
ui->pbtn_setting->setToolTip(tr("Set host and port")); ui->pbtn_setting->setToolTip(tr("Set host and port"));
ui->pbtn_minum->setToolTip(tr("Minimize")); ui->pbtn_minum->setToolTip(tr("Minimize"));
ui->pbtn_close->setToolTip(tr("Close")); ui->pbtn_close->setToolTip(tr("Close"));
ui->label_title->setText(tr("LogIn")); ui->label_title->setText(tr("LogIn"));
ui->lineEdit_password->setEchoMode(QLineEdit::EchoMode::Password);
QString account("root"); QString account("root");
QString dbHost("192.168.1.70");
QString dbPort("3306");
QString ftpHost("192.168.1.70");
QString ftpPort("21");
ui->lineEdit_account->setText(getCfgValue("login", "account", account)); ui->lineEdit_account->setText(getCfgValue("login", "account", account));
// ui->lineEdit_password->setText("123456");
ui->lineEdit_password->setEchoMode(QLineEdit::EchoMode::Password); ui->lineEdit_dbHost->setText(getCfgValue("login", "dbHost", dbHost));
ui->lineEdit_dbHost->setText("192.168.1.70"); ui->lineEdit_dbPort->setText(getCfgValue("login", "dbPort", dbPort));
ui->lineEdit_dbPort->setText("3306"); ui->lineEdit_ftpHost->setText(getCfgValue("login", "ftpHost", ftpHost));
ui->lineEdit_ftpHost->setText("192.168.1.70"); ui->lineEdit_ftpPort->setText(getCfgValue("login", "ftpPort", ftpPort));
ui->lineEdit_ftpPort->setText("21");
ui->label_dbHost->setVisible(false); ui->label_dbHost->setVisible(false);
ui->label_dbPort->setVisible(false); ui->label_dbPort->setVisible(false);
@ -96,12 +100,19 @@ void Dialog_logIn::on_pbtn_login_clicked()
{ {
QString account = ui->lineEdit_account->text(); QString account = ui->lineEdit_account->text();
QString password = ui->lineEdit_password->text(); QString password = ui->lineEdit_password->text();
QString host = ui->lineEdit_dbHost->text(); QString dbHost = ui->lineEdit_dbHost->text();
QString port = ui->lineEdit_dbPort->text(); QString dbPort = ui->lineEdit_dbPort->text();
QString ftpHost = ui->lineEdit_ftpHost->text();
QString ftpPort = ui->lineEdit_ftpPort->text();
saveCfgValue("login", "account", account); saveCfgValue("login", "account", account);
saveCfgValue("login", "dbHost", dbHost);
saveCfgValue("login", "dbPort", dbPort);
saveCfgValue("login", "ftpHost", ftpHost);
saveCfgValue("login", "ftpPort", ftpPort);
HGPdtToolDbUserMgr pdtToolDbuserMgr = nullptr; HGPdtToolDbUserMgr pdtToolDbuserMgr = nullptr;
HGResult ret = HGPdtToolDb_CreateUserMgr(host.toStdString().c_str(), port.toInt(), account.toStdString().c_str(), password.toStdString().c_str(), HGResult ret = HGPdtToolDb_CreateUserMgr(dbHost.toStdString().c_str(), dbPort.toInt(), account.toStdString().c_str(), password.toStdString().c_str(),
&pdtToolDbuserMgr); &pdtToolDbuserMgr);
if (NULL != pdtToolDbuserMgr) if (NULL != pdtToolDbuserMgr)
{ {

View File

@ -70,6 +70,7 @@ Form_mainInterface::Form_mainInterface(class MainWindow *mainwnd, SANE_Handle ha
, m_devType(devType) , m_devType(devType)
, m_devName(devName) , m_devName(devName)
, m_devFwNum(devFwNum) , m_devFwNum(devFwNum)
, m_isTesting(false)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -79,6 +80,7 @@ Form_mainInterface::Form_mainInterface(class MainWindow *mainwnd, SANE_Handle ha
connect(this, SIGNAL(testResult(QString)), this, SLOT(on_testResult(QString)), Qt::QueuedConnection); connect(this, SIGNAL(testResult(QString)), this, SLOT(on_testResult(QString)), Qt::QueuedConnection);
connect(this, SIGNAL(testResultImg(void*)), this, SLOT(on_testResultImg(void*)), Qt::QueuedConnection); connect(this, SIGNAL(testResultImg(void*)), this, SLOT(on_testResultImg(void*)), Qt::QueuedConnection);
connect(this, SIGNAL(testFinish()), this, SLOT(on_testFinish()), Qt::QueuedConnection);
QString str; QString str;
if (m_handle) if (m_handle)
@ -121,6 +123,11 @@ Form_mainInterface::~Form_mainInterface()
delete ui; delete ui;
} }
bool Form_mainInterface::isTesting()
{
return m_isTesting;
}
QString Form_mainInterface::getSn() QString Form_mainInterface::getSn()
{ {
return m_serialNum; return m_serialNum;
@ -178,6 +185,12 @@ void Form_mainInterface::on_testDistortion(QString name, void *data)
} }
} }
void Form_mainInterface::on_testFinish()
{
updateUiEnabled(true);
m_isTesting = false;
}
void Form_mainInterface::on_pbtn_preStep_clicked() void Form_mainInterface::on_pbtn_preStep_clicked()
{ {
int row = ui->tableWidget->currentRow(); int row = ui->tableWidget->currentRow();
@ -445,6 +458,20 @@ QString Form_mainInterface::getCacheFileName()
return fileName; return fileName;
} }
void Form_mainInterface::updateUiEnabled(bool enable)
{
ui->tableWidget->setEnabled(enable);
ui->pbtn_preStep->setEnabled(enable);
ui->pbtn_nextStep->setEnabled(enable);
ui->pbtn_pass->setEnabled(enable);
ui->pbtn_fail->setEnabled(enable);
ui->pbtn_start->setEnabled(enable);
ui->pbtn_showImg->setEnabled(enable);
ui->pbtn_leftRotate->setEnabled(enable);
ui->pbtn_rightRotate->setEnabled(enable);
ui->pbtn_stop->setEnabled(enable);
}
void Form_mainInterface::on_tableWidget_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous) void Form_mainInterface::on_tableWidget_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
{ {
(void)previous; (void)previous;
@ -480,6 +507,11 @@ void Form_mainInterface::on_pbtn_start_clicked()
QString title = item->text(); QString title = item->text();
QString name = m_map_title_name.value(title).name; QString name = m_map_title_name.value(title).name;
int ret = func_test_go(name.toStdWString().c_str(), L"null", m_hg); int ret = func_test_go(name.toStdWString().c_str(), L"null", m_hg);
if (ret == 0)
{
updateUiEnabled(false);
m_isTesting = true;
}
} }
void Form_mainInterface::on_pbtn_showImg_clicked() void Form_mainInterface::on_pbtn_showImg_clicked()

View File

@ -24,6 +24,7 @@ public:
const QString &serialNum, const QString &devType, const QString &devName, const QString &devFwNum); const QString &serialNum, const QString &devType, const QString &devName, const QString &devFwNum);
~Form_mainInterface(); ~Form_mainInterface();
bool isTesting();
QString getSn(); QString getSn();
QString getDevName(); QString getDevName();
SANE_Handle getDevHandle(); SANE_Handle getDevHandle();
@ -36,11 +37,13 @@ signals:
void testResult(QString text); void testResult(QString text);
void testResultImg(void* img); void testResultImg(void* img);
void testDistortion(QString title, void *data); void testDistortion(QString title, void *data);
void testFinish();
private slots: private slots:
void on_testResult(QString text); void on_testResult(QString text);
void on_testResultImg(void* img); void on_testResultImg(void* img);
void on_testDistortion(QString title, void *data); void on_testDistortion(QString title, void *data);
void on_testFinish();
private slots: private slots:
void on_pbtn_preStep_clicked(); void on_pbtn_preStep_clicked();
@ -71,6 +74,7 @@ private:
QString getItemStatusStr(HGUInt status); QString getItemStatusStr(HGUInt status);
QString getCachePath(); QString getCachePath();
QString getCacheFileName(); QString getCacheFileName();
void updateUiEnabled(bool enable);
private: private:
Ui::Form_mainInterface *ui; Ui::Form_mainInterface *ui;
@ -88,6 +92,7 @@ private:
QString m_devType; QString m_devType;
QString m_devName; QString m_devName;
QString m_devFwNum; QString m_devFwNum;
bool m_isTesting;
QMap<QString, AnalysisJson::json_node> m_map_title_name; QMap<QString, AnalysisJson::json_node> m_map_title_name;
}; };

View File

@ -34,22 +34,37 @@ void hgscanner::test_callback(const wchar_t* name, test_event ev, void* data, si
if (ev == TEST_EVENT_TIPS) if (ev == TEST_EVENT_TIPS)
{ {
}
else if (ev == TEST_EVENT_RESULT)
{
QString ret;
QString info = QString::fromStdWString((const wchar_t*)data);
if (flag)
ret = QObject::tr("success: ") + info;
else
ret = QObject::tr("failed: ") + info;
emit m_interface->testResult(ret);
} }
else if (ev == TEST_EVENT_NOT_FIND_TEST) else if (ev == TEST_EVENT_NOT_FIND_TEST)
{ {
QString info = QObject::tr("Not find test item"); QString info = QObject::tr("Not find test item");
emit m_interface->testResult(info); emit m_interface->testResult(info);
emit m_interface->testFinish();
}
else if (ev == TEST_EVENT_IO_FAIL)
{
QString info = QString::fromStdWString((const wchar_t*)data);
info = QObject::tr("failed: ") + info;
emit m_interface->testResult(info);
emit m_interface->testFinish();
}
else if (ev == TEST_EVENT_MANUAL_CONFIRMATION)
{
QString info = QString::fromStdWString((const wchar_t*)data);
emit m_interface->testResult(info);
emit m_interface->testFinish();
}
else if (ev == TEST_EVENT_RESULT)
{
QString info = QString::fromStdWString((const wchar_t*)data);
if (flag)
info = QObject::tr("success: ") + info;
else
info = QObject::tr("failed: ") + info;
emit m_interface->testResult(info);
emit m_interface->testFinish();
} }
else if (ev == TEST_EVENT_DISTORTION) else if (ev == TEST_EVENT_DISTORTION)
{ {

View File

@ -232,6 +232,42 @@ bool MainWindow::RemoveInterface(Form_mainInterface *interface)
return true; return true;
} }
bool MainWindow::isTesting()
{
bool isTesting = false;
for (int i = 0; i < m_top_splitter->count(); ++i)
{
Form_mainInterface *interface = (Form_mainInterface *)m_top_splitter->widget(i);
if (interface->isTesting())
{
isTesting = true;
break;
}
}
if (!isTesting)
{
for (int i = 0; i < m_bot_splitter->count(); ++i)
{
Form_mainInterface *interface = (Form_mainInterface *)m_bot_splitter->widget(i);
if (interface->isTesting())
{
isTesting = true;
break;
}
}
}
return isTesting;
}
void MainWindow::closeEvent(QCloseEvent *event)
{
if (isTesting())
{
QMessageBox::information(this, tr("tips"), tr("Is testing, do not close!"));
event->ignore();
}
}
int MainWindow::sane_ex_callback(SANE_Handle hdev, int code, void *data, unsigned int *len, void *param) int MainWindow::sane_ex_callback(SANE_Handle hdev, int code, void *data, unsigned int *len, void *param)
{ {
MainWindow* p = (MainWindow*)param; MainWindow* p = (MainWindow*)param;
@ -387,9 +423,12 @@ void MainWindow::on_update_userStatus()
if (!tips.isEmpty()) if (!tips.isEmpty())
{ {
QMessageBox::information(this, (tr("tips")), tips); if (!isTesting())
m_isLogOut = true; {
close(); QMessageBox::information(this, (tr("tips")), tips);
m_isLogOut = true;
close();
}
} }
} }
@ -440,6 +479,11 @@ void MainWindow::on_act_export_triggered()
void MainWindow::on_act_logOut_triggered() void MainWindow::on_act_logOut_triggered()
{ {
if (isTesting())
{
QMessageBox::information(this, tr("tips"), tr("Is testing, do not close!"));
return;
}
m_isLogOut = true; m_isLogOut = true;
close(); close();
} }
@ -447,6 +491,12 @@ void MainWindow::on_act_logOut_triggered()
void MainWindow::on_act_close_triggered() void MainWindow::on_act_close_triggered()
{ {
if (isTesting())
{
QMessageBox::information(this, tr("tips"), tr("Is testing, do not close!"));
return;
}
close(); close();
} }

View File

@ -30,7 +30,10 @@ public:
Form_mainInterface* FindInterface(SANE_Handle handle); Form_mainInterface* FindInterface(SANE_Handle handle);
bool AddInterface(Form_mainInterface *interface); bool AddInterface(Form_mainInterface *interface);
bool RemoveInterface(Form_mainInterface *interface); bool RemoveInterface(Form_mainInterface *interface);
bool isTesting();
protected:
void closeEvent(QCloseEvent *event);
private: private:
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param); static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);