code_app/app/scantool/mainwindow.cpp

261 lines
9.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QCloseEvent>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_scanDlg = new Dialog_Scan(this);
m_trayIcon = new QSystemTrayIcon(this);
m_trayIcon->setIcon(QIcon(":images/image_rsc/png/logo.png"));
m_trayIcon->show();
m_trayIcon->setToolTip(tr("HuaGao Scan Tool"));
qRegisterMetaType<QSystemTrayIcon::ActivationReason>("QSystemTrayIcon::ActivationReason");
connect(m_trayIcon, &QSystemTrayIcon::activated, this, &MainWindow::on_trayActivated);
m_scanAction = new QAction(tr("Scan Setting"), this);
connect(m_scanAction, &QAction::triggered, this, &MainWindow::on_showScanSettingDlg);
m_btnAction = new QAction(tr("Button Setting"), this);
connect(m_btnAction, &QAction::triggered, this, &MainWindow::show);
m_quitAction = new QAction(tr("Exit"), this);
connect(m_quitAction, &QAction::triggered, this, &QCoreApplication::quit); //应用程序的退出
//创建菜单,添加菜单项
m_trayIconMenu = new QMenu(this);
m_trayIconMenu->addAction(m_scanAction);
m_trayIconMenu->addAction(m_btnAction);
m_trayIconMenu->addSeparator(); //分割线
m_trayIconMenu->addAction(m_quitAction);
//给系统托盘添加右键菜单
m_trayIcon->setContextMenu(m_trayIconMenu);
ui->tableWidget->setColumnCount(4);
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableWidget->setStyleSheet("selection-background-color:rgb(0, 120, 215)");
ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableWidget->horizontalHeader()->setFixedHeight(40);
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Device Type"));
ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Button Type"));
ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Device Config"));
ui->tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Save Param"));
ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Fixed);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Stretch);
// TODO 读取配置文件设置m_vScanParams
ui->tableWidget->setRowCount((int)m_vScanParams.size());
for (int index = 0; index < (int)m_vScanParams.size(); ++index)
{
ui->tableWidget->setRowHeight(index, 30);
const char *devTypeStr[] = {NULL, "G100", "G200", "G300", "G400"};
ui->tableWidget->setItem(index, 0, new QTableWidgetItem(devTypeStr[m_vScanParams[index].deviceType]));
ui->tableWidget->item(index, 0)->setTextAlignment(Qt::AlignCenter);
ui->tableWidget->item(index, 0)->setFlags(ui->tableWidget->item(index, 0)->flags() & ~Qt::ItemIsEditable);
const char *btnTypeStr[] = {NULL, "Button 1", "Button 2", "Button 3"};
ui->tableWidget->setItem(index, 1, new QTableWidgetItem(btnTypeStr[m_vScanParams[index].buttonType]));
ui->tableWidget->item(index, 1)->setTextAlignment(Qt::AlignCenter);
ui->tableWidget->item(index, 1)->setFlags(ui->tableWidget->item(index, 1)->flags() & ~Qt::ItemIsEditable);
ui->tableWidget->setItem(index, 2, new QTableWidgetItem(GetDesc(m_vScanParams[index].deviceConfig)));
ui->tableWidget->item(index, 2)->setTextAlignment(Qt::AlignCenter);
ui->tableWidget->item(index, 2)->setFlags(ui->tableWidget->item(index, 2)->flags() & ~Qt::ItemIsEditable);
ui->tableWidget->setItem(index, 3, new QTableWidgetItem(GetDesc(m_vScanParams[index].saveParam)));
ui->tableWidget->item(index, 3)->setTextAlignment(Qt::AlignCenter);
ui->tableWidget->item(index, 3)->setFlags(ui->tableWidget->item(index, 3)->flags() & ~Qt::ItemIsEditable);
}
ui->tableWidget->selectRow(0);
}
MainWindow::~MainWindow()
{
delete m_scanDlg;
delete ui;
}
bool MainWindow::GetScanParam(DeviceType deviceType, ButtonType buttonType, ScanParam &scanParam)
{
for (int i = 0; i < (int)m_vScanParams.size(); ++i)
{
if (deviceType == m_vScanParams[i].deviceType && buttonType == m_vScanParams[i].buttonType)
{
scanParam = m_vScanParams[i];
return true;
}
}
return false;
}
bool MainWindow::FindScanParam(DeviceType deviceType, ButtonType buttonType, int ignoreIndex)
{
for (int i = 0; i < (int)m_vScanParams.size(); ++i)
{
if (deviceType == m_vScanParams[i].deviceType && buttonType == m_vScanParams[i].buttonType)
{
if (-1 == ignoreIndex) // 表示均不忽略
{
return true;
}
else if (i != ignoreIndex)
{
return true;
}
}
}
return false;
}
QString MainWindow::GetDesc(const std::string &deviceConfig)
{
QString desc;
return desc;
}
QString MainWindow::GetDesc(const SaveParam &saveParam)
{
QString desc;
desc += "[";
desc += tr("Save path:");
desc += saveParam.m_savePath;
desc += "]";
desc += " ";
desc += "[";
desc += tr("Image format:");
desc += saveParam.m_fileNameExt;
desc += "]";
return desc;
}
void MainWindow::closeEvent(QCloseEvent *e)
{
if (m_trayIcon->isVisible()) //托盘是显示的
{
hide(); // 隐藏主窗口
e->ignore(); //忽略关闭事件,这样才不会关闭程序
}
}
void MainWindow::on_trayActivated(QSystemTrayIcon::ActivationReason reason)
{
if (QSystemTrayIcon::Trigger == reason)
{
}
else if (QSystemTrayIcon::DoubleClick == reason)
{
show();
}
else if (QSystemTrayIcon::MiddleClick == reason)
{
}
}
void MainWindow::on_showScanSettingDlg()
{
m_scanDlg->show();
}
void MainWindow::on_pushButtonAdd_clicked()
{
Dialog_Add dlg(this);
if (dlg.exec())
{
ScanParam scanParam = dlg.GetScanParam();
m_vScanParams.push_back(scanParam);
// TODO 保存m_vScanParams
ui->tableWidget->setRowCount((int)m_vScanParams.size());
int index = (int)m_vScanParams.size() - 1;
ui->tableWidget->setRowHeight(index, 30);
const char *devTypeStr[] = {NULL, "G100", "G200", "G300", "G400"};
ui->tableWidget->setItem(index, 0, new QTableWidgetItem(devTypeStr[m_vScanParams[index].deviceType]));
ui->tableWidget->item(index, 0)->setTextAlignment(Qt::AlignCenter);
ui->tableWidget->item(index, 0)->setFlags(ui->tableWidget->item(index, 0)->flags() & ~Qt::ItemIsEditable);
const char *btnTypeStr[] = {NULL, "Button 1", "Button 2", "Button 3"};
ui->tableWidget->setItem(index, 1, new QTableWidgetItem(btnTypeStr[m_vScanParams[index].buttonType]));
ui->tableWidget->item(index, 1)->setTextAlignment(Qt::AlignCenter);
ui->tableWidget->item(index, 1)->setFlags(ui->tableWidget->item(index, 1)->flags() & ~Qt::ItemIsEditable);
ui->tableWidget->setItem(index, 2, new QTableWidgetItem(GetDesc(m_vScanParams[index].deviceConfig)));
ui->tableWidget->item(index, 2)->setTextAlignment(Qt::AlignCenter);
ui->tableWidget->item(index, 2)->setFlags(ui->tableWidget->item(index, 2)->flags() & ~Qt::ItemIsEditable);
ui->tableWidget->setItem(index, 3, new QTableWidgetItem(GetDesc(m_vScanParams[index].saveParam)));
ui->tableWidget->item(index, 3)->setTextAlignment(Qt::AlignCenter);
ui->tableWidget->item(index, 3)->setFlags(ui->tableWidget->item(index, 3)->flags() & ~Qt::ItemIsEditable);
ui->tableWidget->selectRow(index);
}
}
void MainWindow::on_pushButtonModify_clicked()
{
int index = ui->tableWidget->currentRow();
if (-1 == index)
{
QMessageBox::information(this, tr("Tips"), tr("No item selected"));
return;
}
Dialog_Add dlg(this, m_vScanParams[index], index);
if (dlg.exec())
{
ScanParam scanParam = dlg.GetScanParam();
m_vScanParams[index] = scanParam;
// TODO 保存m_vScanParams
const char *devTypeStr[] = {NULL, "G100", "G200", "G300", "G400"};
ui->tableWidget->item(index, 0)->setText(QString::fromStdString(devTypeStr[m_vScanParams[index].deviceType]));
const char *btnTypeStr[] = {NULL, "Button 1", "Button 2", "Button 3"};
ui->tableWidget->item(index, 1)->setText(QString::fromStdString(btnTypeStr[m_vScanParams[index].buttonType]));
ui->tableWidget->item(index, 2)->setText(GetDesc(m_vScanParams[index].deviceConfig));
ui->tableWidget->item(index, 3)->setText(GetDesc(m_vScanParams[index].saveParam));
}
}
void MainWindow::on_pushButtonRemove_clicked()
{
int index = ui->tableWidget->currentRow();
if (-1 == index)
{
QMessageBox::information(this, tr("Tips"), tr("No item selected"));
return;
}
QMessageBox msg(QMessageBox::Question, tr("Question"),
tr("Are you sure you want to remove the item?"),
QMessageBox::Yes | QMessageBox::No, this);
msg.exec();
if (msg.clickedButton() != msg.button(QMessageBox::Yes))
{
return;
}
m_vScanParams.erase(m_vScanParams.begin() + index);
// TODO 保存m_vScanParams
ui->tableWidget->removeRow(index);
}