scantool增加扫描功能
This commit is contained in:
parent
34c8821802
commit
480476e041
|
@ -9,11 +9,13 @@
|
|||
#include "imgproc/HGImgProc.h"
|
||||
#include "imgproc/HGOCR.h"
|
||||
#include "HGUIGlobal.h"
|
||||
#include "dialog_scaninfo.h"
|
||||
|
||||
Dialog_Scan::Dialog_Scan(class MainWindow *mainWnd)
|
||||
: QDialog(nullptr)
|
||||
, ui(new Ui::Dialog_Scan)
|
||||
, m_mainWnd(mainWnd)
|
||||
, m_dlgScanInfo(nullptr)
|
||||
, m_devHandle(nullptr)
|
||||
, m_scanning(false)
|
||||
, m_dpi(200)
|
||||
|
@ -24,6 +26,7 @@ Dialog_Scan::Dialog_Scan(class MainWindow *mainWnd)
|
|||
{
|
||||
ui->setupUi(this);
|
||||
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
|
||||
m_dlgScanInfo = new Dialog_ScanInfo(this);
|
||||
|
||||
connect(this, SIGNAL(deviceArrive(QString)), this, SLOT(on_deviceArrive(QString)));
|
||||
connect(this, SIGNAL(deviceRemove(QString)), this, SLOT(on_deviceRemove(QString)));
|
||||
|
@ -48,6 +51,8 @@ Dialog_Scan::~Dialog_Scan()
|
|||
}
|
||||
|
||||
sane_exit();
|
||||
|
||||
delete m_dlgScanInfo;
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
@ -182,6 +187,7 @@ void Dialog_Scan::StartScan(unsigned int buttonId)
|
|||
}
|
||||
|
||||
m_scanning = true;
|
||||
m_mainWnd->SetBusy(true);
|
||||
ui->comboBox->setEnabled(false);
|
||||
ui->pushButtonScan->setEnabled(false);
|
||||
status = sane_start(m_devHandle);
|
||||
|
@ -197,9 +203,14 @@ void Dialog_Scan::StartScan(unsigned int buttonId)
|
|||
}
|
||||
|
||||
m_scanning = false;
|
||||
m_mainWnd->SetBusy(false);
|
||||
m_dpi = 200;
|
||||
ui->comboBox->setEnabled(true);
|
||||
ui->pushButtonScan->setEnabled(true);
|
||||
|
||||
emit scanWorking();
|
||||
emit scanInfo((const char*)sane_strstatus(status), true);
|
||||
emit scanFinish();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -211,6 +222,7 @@ void Dialog_Scan::StopScan()
|
|||
assert(NULL != m_devHandle);
|
||||
sane_cancel(m_devHandle);
|
||||
m_scanning = false;
|
||||
m_mainWnd->SetBusy(false);
|
||||
m_dpi = 200;
|
||||
ui->comboBox->setEnabled(true);
|
||||
ui->pushButtonScan->setEnabled(true);
|
||||
|
@ -608,17 +620,17 @@ void Dialog_Scan::on_keyPress(unsigned int buttonId)
|
|||
|
||||
void Dialog_Scan::on_scanWorking()
|
||||
{
|
||||
// TODO 显示扫描进度窗口
|
||||
m_dlgScanInfo->Start();
|
||||
}
|
||||
|
||||
void Dialog_Scan::on_scanInfo(QString info, bool error)
|
||||
{
|
||||
// TODO 更新扫描信息到进度窗口
|
||||
m_dlgScanInfo->SetScanInfo(info, error);
|
||||
}
|
||||
|
||||
void Dialog_Scan::on_scanImage(unsigned int count)
|
||||
{
|
||||
// TODO 更新扫描数量到进度窗口
|
||||
m_dlgScanInfo->SetScanCount(count);
|
||||
}
|
||||
|
||||
void Dialog_Scan::on_scanFinish()
|
||||
|
@ -654,16 +666,15 @@ void Dialog_Scan::on_scanFinish()
|
|||
m_ocrMsgPump = NULL;
|
||||
}
|
||||
|
||||
// TODO 隐藏扫描进度窗口
|
||||
|
||||
StopScan();
|
||||
m_dlgScanInfo->Finish();
|
||||
}
|
||||
|
||||
void Dialog_Scan::on_comboBox_currentIndexChanged(const QString &arg1)
|
||||
{
|
||||
assert(!m_scanning);
|
||||
if (NULL != m_devHandle)
|
||||
{
|
||||
StopScan();
|
||||
sane_close(m_devHandle);
|
||||
m_devHandle = NULL;
|
||||
m_devName.clear();
|
||||
|
|
|
@ -24,9 +24,11 @@ public:
|
|||
explicit Dialog_Scan(class MainWindow *mainWnd);
|
||||
~Dialog_Scan();
|
||||
|
||||
private:
|
||||
public:
|
||||
void StartScan(unsigned int buttonId);
|
||||
void StopScan();
|
||||
|
||||
private:
|
||||
void SaveImage(HGImage image);
|
||||
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
|
||||
static void HGAPI ocrThreadFunc(HGThread thread, HGPointer param);
|
||||
|
@ -60,6 +62,7 @@ private slots:
|
|||
private:
|
||||
Ui::Dialog_Scan *ui;
|
||||
class MainWindow *m_mainWnd;
|
||||
class Dialog_ScanInfo *m_dlgScanInfo;
|
||||
QString m_devName;
|
||||
SANE_Handle m_devHandle;
|
||||
bool m_scanning;
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
#include "dialog_scaninfo.h"
|
||||
#include "ui_dialog_scaninfo.h"
|
||||
#include "dialog_scan.h"
|
||||
#include <QDesktopWidget>
|
||||
#include <QTimer>
|
||||
|
||||
Dialog_ScanInfo::Dialog_ScanInfo(class Dialog_Scan *dlgScan)
|
||||
: QDialog(nullptr)
|
||||
, ui(new Ui::Dialog_ScanInfo)
|
||||
, m_dlgScan(dlgScan)
|
||||
, m_timer(nullptr)
|
||||
, m_error(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
|
||||
m_timer = new QTimer(this);
|
||||
|
||||
QDesktopWidget *desktop = QApplication::desktop();
|
||||
QRect workArea = desktop->availableGeometry();
|
||||
move(workArea.right() - width(), workArea.bottom() - height());
|
||||
}
|
||||
|
||||
Dialog_ScanInfo::~Dialog_ScanInfo()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void Dialog_ScanInfo::Start()
|
||||
{
|
||||
m_error = false;
|
||||
ui->labelScanInfo->setText("");
|
||||
ui->labelScanInfo->repaint();
|
||||
ui->labelScanCount->setText(tr("Scan count: 0"));
|
||||
ui->labelScanCount->repaint();
|
||||
this->repaint();
|
||||
|
||||
ui->pushButtonCancel->setVisible(true);
|
||||
ui->pushButtonOK->setVisible(false);
|
||||
show();
|
||||
}
|
||||
|
||||
void Dialog_ScanInfo::SetScanInfo(const QString &info, bool error)
|
||||
{
|
||||
ui->labelScanInfo->setText(info);
|
||||
ui->labelScanInfo->repaint();
|
||||
this->repaint();
|
||||
m_error = error;
|
||||
}
|
||||
|
||||
void Dialog_ScanInfo::SetScanCount(unsigned int count)
|
||||
{
|
||||
ui->labelScanCount->setText(tr("Scan count: ") + QString::number(count));
|
||||
ui->labelScanCount->repaint();
|
||||
this->repaint();
|
||||
}
|
||||
|
||||
void Dialog_ScanInfo::Finish()
|
||||
{
|
||||
ui->pushButtonCancel->setVisible(false);
|
||||
ui->pushButtonOK->setVisible(true);
|
||||
|
||||
if (!m_error)
|
||||
{
|
||||
m_timer->start(1000);
|
||||
connect(m_timer, &QTimer::timeout, this, &Dialog_ScanInfo::on_pushButtonOK_clicked);
|
||||
}
|
||||
}
|
||||
|
||||
void Dialog_ScanInfo::on_pushButtonOK_clicked()
|
||||
{
|
||||
disconnect(m_timer, &QTimer::timeout, this, &Dialog_ScanInfo::on_pushButtonOK_clicked);
|
||||
hide();
|
||||
}
|
||||
|
||||
void Dialog_ScanInfo::on_pushButtonCancel_clicked()
|
||||
{
|
||||
m_dlgScan->StopScan();
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
#ifndef DIALOG_SCANINFO_H
|
||||
#define DIALOG_SCANINFO_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class Dialog_ScanInfo;
|
||||
}
|
||||
|
||||
class Dialog_ScanInfo : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Dialog_ScanInfo(class Dialog_Scan *dlgScan);
|
||||
~Dialog_ScanInfo();
|
||||
|
||||
void Start();
|
||||
void SetScanInfo(const QString &info, bool error);
|
||||
void SetScanCount(unsigned int count);
|
||||
void Finish();
|
||||
|
||||
private slots:
|
||||
void on_pushButtonOK_clicked();
|
||||
|
||||
void on_pushButtonCancel_clicked();
|
||||
|
||||
private:
|
||||
Ui::Dialog_ScanInfo *ui;
|
||||
class Dialog_Scan *m_dlgScan;
|
||||
QTimer *m_timer;
|
||||
bool m_error;
|
||||
};
|
||||
|
||||
#endif // DIALOG_SCANINFO_H
|
|
@ -0,0 +1,199 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Dialog_ScanInfo</class>
|
||||
<widget class="QDialog" name="Dialog_ScanInfo">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>294</width>
|
||||
<height>202</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelScanInfo">
|
||||
<property name="text">
|
||||
<string>Scan info</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelScanCount">
|
||||
<property name="text">
|
||||
<string>Scan count:0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButtonCancel">
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_8">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButtonOK">
|
||||
<property name="text">
|
||||
<string>OK</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -50,10 +50,9 @@ MainWindow::MainWindow(QWidget *parent)
|
|||
ui->tableWidget->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);
|
||||
ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Stretch);
|
||||
|
||||
// TODO 读取配置文件,设置m_vScanParams
|
||||
LoadCfg();
|
||||
|
||||
ui->tableWidget->setRowCount((int)m_vScanParams.size());
|
||||
|
||||
for (int index = 0; index < (int)m_vScanParams.size(); ++index)
|
||||
{
|
||||
ui->tableWidget->setRowHeight(index, 30);
|
||||
|
@ -85,6 +84,14 @@ MainWindow::~MainWindow()
|
|||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::SetBusy(bool busy)
|
||||
{
|
||||
m_quitAction->setEnabled(!busy);
|
||||
ui->pushButtonAdd->setEnabled(!busy);
|
||||
ui->pushButtonModify->setEnabled(!busy);
|
||||
ui->pushButtonRemove->setEnabled(!busy);
|
||||
}
|
||||
|
||||
bool MainWindow::GetScanParam(const std::string &deviceType, unsigned int buttonId, ScanParam &scanParam)
|
||||
{
|
||||
for (int i = 0; i < (int)m_vScanParams.size(); ++i)
|
||||
|
@ -119,6 +126,16 @@ bool MainWindow::FindScanParam(const std::string &deviceType, unsigned int butto
|
|||
return false;
|
||||
}
|
||||
|
||||
void MainWindow::LoadCfg()
|
||||
{
|
||||
// TODO 加载配置文件到m_vScanParams
|
||||
}
|
||||
|
||||
void MainWindow::SaveCfg()
|
||||
{
|
||||
// TODO 保存m_vScanParams到配置文件
|
||||
}
|
||||
|
||||
QString MainWindow::GetDesc(const std::vector<DeviceConfig> &deviceConfigs)
|
||||
{
|
||||
QString desc;
|
||||
|
@ -202,7 +219,7 @@ void MainWindow::on_pushButtonAdd_clicked()
|
|||
{
|
||||
ScanParam scanParam = dlg.GetScanParam();
|
||||
m_vScanParams.push_back(scanParam);
|
||||
// TODO 保存m_vScanParams
|
||||
SaveCfg();
|
||||
|
||||
ui->tableWidget->setRowCount((int)m_vScanParams.size());
|
||||
int index = (int)m_vScanParams.size() - 1;
|
||||
|
@ -264,7 +281,7 @@ void MainWindow::on_pushButtonModify_clicked()
|
|||
{
|
||||
ScanParam scanParam = dlg.GetScanParam();
|
||||
m_vScanParams[index] = scanParam;
|
||||
// TODO 保存m_vScanParams
|
||||
SaveCfg();
|
||||
|
||||
ui->tableWidget->item(index, 0)->setText(QString::fromStdString(m_vScanParams[index].deviceType));
|
||||
|
||||
|
@ -295,6 +312,6 @@ void MainWindow::on_pushButtonRemove_clicked()
|
|||
}
|
||||
|
||||
m_vScanParams.erase(m_vScanParams.begin() + index);
|
||||
// TODO 保存m_vScanParams
|
||||
SaveCfg();
|
||||
ui->tableWidget->removeRow(index);
|
||||
}
|
||||
|
|
|
@ -20,10 +20,13 @@ public:
|
|||
MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
void SetBusy(bool busy);
|
||||
bool GetScanParam(const std::string &deviceType, unsigned int buttonId, ScanParam &scanParam);
|
||||
bool FindScanParam(const std::string &deviceType, unsigned int buttonId, int ignoreIndex);
|
||||
|
||||
private:
|
||||
void LoadCfg();
|
||||
void SaveCfg();
|
||||
QString GetDesc(const std::vector<DeviceConfig> &deviceConfigs);
|
||||
QString GetDesc(const SaveParam &saveParam);
|
||||
|
||||
|
|
|
@ -102,6 +102,7 @@ SOURCES += \
|
|||
../../../app/scantool/app_cfg.cpp \
|
||||
../../../app/scantool/dialog_add.cpp \
|
||||
../../../app/scantool/dialog_scan.cpp \
|
||||
../../../app/scantool/dialog_scaninfo.cpp \
|
||||
../../../app/scantool/dialog_writesettings.cpp \
|
||||
../../../app/scantool/form_deviceconfig.cpp \
|
||||
../../../app/scantool/form_saveparam.cpp \
|
||||
|
@ -117,6 +118,7 @@ HEADERS += \
|
|||
../../../app/scantool/app_cfg.h \
|
||||
../../../app/scantool/dialog_add.h \
|
||||
../../../app/scantool/dialog_scan.h \
|
||||
../../../app/scantool/dialog_scaninfo.h \
|
||||
../../../app/scantool/dialog_writesettings.h \
|
||||
../../../app/scantool/form_deviceconfig.h \
|
||||
../../../app/scantool/form_saveparam.h \
|
||||
|
@ -128,6 +130,7 @@ HEADERS += \
|
|||
FORMS += \
|
||||
../../../app/scantool/dialog_add.ui \
|
||||
../../../app/scantool/dialog_scan.ui \
|
||||
../../../app/scantool/dialog_scaninfo.ui \
|
||||
../../../app/scantool/dialog_writesettings.ui \
|
||||
../../../app/scantool/form_saveparam.ui \
|
||||
../../../app/scantool/mainwindow.ui
|
||||
|
|
Loading…
Reference in New Issue