deepin-ocr/src/mainwidget.cpp
He MingYang 155256cbd9 feat(工程建立): OCR文字识别工程建立
no

Log: no
Change-Id: I6bb42a4ae96f000a1ee937d2c69d1f7e3208e7e3
2021-06-10 19:02:46 +08:00

316 lines
10 KiB
C++

#include "mainwidget.h"
#include "view/imageview.h"
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
#include <QTextBlock>
#include <QStandardPaths>
#include <QFileDialog>
#include <QFileInfo>
#include <DGuiApplicationHelper>
#include <DMainWindow>
#include <DTitlebar>
#include <DMessageManager>
#define App (static_cast<QApplication*>(QCoreApplication::instance()))
MainWidget::MainWidget(QWidget *parent) :
DWidget(parent)
{
setupUi(this);
DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType();
setIcons(themeType);
setupConnect();
}
MainWidget::~MainWidget()
{
// m_mainGridLayout->addLayout(m_buttonHorizontalLayout, 1, 0, 1, 1);
m_mainGridLayout->removeItem(m_buttonHorizontalLayout);
if (m_imageview) {
m_imageview->deleteLater();
m_imageview = nullptr;
}
if (m_mainGridLayout) {
m_mainGridLayout->deleteLater();
m_mainGridLayout = nullptr;
}
if (m_horizontalLayout) {
m_horizontalLayout->deleteLater();
m_horizontalLayout = nullptr;
}
if (m_plainTextEdit) {
m_plainTextEdit->deleteLater();
m_plainTextEdit = nullptr;
}
if (m_buttonHorizontalLayout) {
m_buttonHorizontalLayout->deleteLater();
m_buttonHorizontalLayout = nullptr;
}
if (m_tipHorizontalLayout) {
m_tipHorizontalLayout->deleteLater();
m_tipHorizontalLayout = nullptr;
}
if (m_tiplabel) {
m_tiplabel->deleteLater();
m_tiplabel = nullptr;
}
if (m_copyBtn) {
m_copyBtn->deleteLater();
m_copyBtn = nullptr;
}
if (m_exportBtn) {
m_exportBtn->deleteLater();
m_exportBtn = nullptr;
}
if (m_tipIconLabel) {
m_tipIconLabel->deleteLater();
m_tipIconLabel = nullptr;
}
}
void MainWidget::setupUi(QWidget *Widget)
{
DMainWindow *mainWindow = static_cast<DMainWindow *>(this->parent());
if (mainWindow) {
mainWindow->titlebar()->setMenuVisible(false);
}
m_mainGridLayout = new QGridLayout(Widget);
m_mainGridLayout->setSpacing(6);
m_mainGridLayout->setContentsMargins(0, 0, 0, 0);
m_mainGridLayout->setObjectName(QStringLiteral("gridLayout"));
m_horizontalLayout = new QHBoxLayout(Widget);
m_horizontalLayout->setSpacing(0);
m_horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
m_plainTextEdit = new ResultTextView(Widget);
m_plainTextEdit->setObjectName(QStringLiteral("plainTextEdit"));
if (!m_imageview) {
m_imageview = new ImageView();
}
m_horizontalLayout->addWidget(m_imageview);
m_horizontalLayout->addWidget(m_plainTextEdit);
m_horizontalLayout->setStretch(0, 1);
m_mainGridLayout->addLayout(m_horizontalLayout, 0, 0, 1, 1);
m_mainGridLayout->setColumnStretch(0, 1);
m_buttonHorizontalLayout = new QHBoxLayout(Widget);
m_buttonHorizontalLayout->setContentsMargins(20, 0, 59, 0); //表示控件与窗体的左右边距
// m_buttonHorizontalLayout->setSpacing(30);
m_buttonHorizontalLayout->setObjectName(QStringLiteral("horizontalLayout_2"));
m_tipHorizontalLayout = new QHBoxLayout(Widget);
m_tipIconLabel = new DLabel(Widget);
m_tipIconLabel->setObjectName(QStringLiteral("tipIconLabel"));
m_tipHorizontalLayout->addWidget(m_tipIconLabel);
m_tiplabel = new DLabel(Widget);
m_tiplabel->setObjectName(QStringLiteral("tiplabel"));
m_tipHorizontalLayout->addWidget(m_tiplabel);
m_buttonHorizontalLayout->addLayout(m_tipHorizontalLayout);
QSpacerItem *horizontalSpacer = new QSpacerItem(159, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); m_buttonHorizontalLayout->addItem(horizontalSpacer);
m_buttonHorizontalLayout->addItem(horizontalSpacer);
m_copyBtn = new DIconButton(Widget);
m_copyBtn->setObjectName(QStringLiteral("Copy"));
m_copyBtn->setMaximumSize(QSize(40, 40));
m_buttonHorizontalLayout->addWidget(m_copyBtn);
m_exportBtn = new DIconButton(Widget);
m_exportBtn->setObjectName(QStringLiteral("Export"));
m_exportBtn->setMaximumSize(QSize(40, 40));
m_buttonHorizontalLayout->addWidget(m_exportBtn);
m_mainGridLayout->addLayout(m_buttonHorizontalLayout, 1, 0, 1, 1);
retranslateUi(Widget);
QMetaObject::connectSlotsByName(Widget);
m_pwidget = new QWidget(this);
m_pwidget->setFocusPolicy(Qt::NoFocus);
m_pwidget->setAttribute(Qt::WA_TransparentForMouseEvents);
m_pwidget->setFixedSize(this->width(), this->height() - 23);
m_pwidget->move(0, 0);
createLoadingUi();
// deleteLoadingUi();
}
void MainWidget::setupConnect()
{
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::paletteTypeChanged, this, &MainWidget::setIcons);
connect(m_exportBtn, &DIconButton::clicked, this, &MainWidget::slotExport);
connect(m_copyBtn, &DIconButton::clicked, this, &MainWidget::slotCopy);
}
void MainWidget::retranslateUi(QWidget *Widget)
{
Widget->setWindowTitle(QApplication::translate("Widget", "Widget", nullptr));
m_tiplabel->setText(QApplication::translate("Widget", "Tips: The clearer the image is, the more accurate the text is", nullptr));
// m_copyBtn->setText(QApplication::translate("Widget", "Copy", nullptr));
// m_exportBtn->setText(QApplication::translate("Widget", "Export", nullptr));
}
void MainWidget::createLoadingUi()
{
m_isLoading = true;
m_loadingWidget = new TextLoadWidget(this);
m_loadingWidget->resize(40, 40);
m_loadingWidget->show();
m_loadingTip = new DLabel(tr("Recognizing"), this);
m_loadingTip->show();
DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType();
if (themeType == DGuiApplicationHelper::DarkType) {
m_imageview->setForegroundBrush(QColor(0, 0, 0, 150)); //设置场景的前景色,类似于遮罩
} else {
m_imageview->setForegroundBrush(QColor(255, 255, 255, 150)); //设置场景的前景色,类似于遮罩
}
}
void MainWidget::deleteLoadingUi()
{
m_isLoading = false;
if (m_loadingWidget) {
m_loadingWidget->deleteLater();
m_loadingWidget = nullptr;
}
if (m_loadingTip) {
m_loadingTip->deleteLater();
m_loadingTip = nullptr;
}
m_imageview->setForegroundBrush(QColor(0, 0, 0, 0)); //设置场景的前景色,类似于遮罩
}
void MainWidget::loadingUi()
{
if (m_loadingWidget && m_loadingTip && m_plainTextEdit) {
int x = this->width() - m_plainTextEdit->width() / 2;
int y = this->height() / 2 - 50;
m_loadingWidget->move(x, y);
m_loadingTip->move(x - 20, y + 24);
}
}
void MainWidget::openImage(const QString &path)
{
QImage img(path);
m_imageview->openFilterImage(img);
m_imageview->fitWindow();
m_imgName = path;
}
void MainWidget::openImage(const QImage &img)
{
m_imageview->openFilterImage(img);
m_imageview->fitWindow();
m_imgName = "";
}
void MainWidget::resizeEvent(QResizeEvent *event)
{
loadingUi();
return DWidget::resizeEvent(event);
}
void MainWidget::slotCopy()
{
QIcon icon(":/assets/icon_toast_sucess_new.svg");
DFloatingMessage *pDFloatingMessage = new DFloatingMessage(DFloatingMessage::MessageType::TransientType, this);
pDFloatingMessage->setBlurBackgroundEnabled(true);
pDFloatingMessage->setMessage(tr("Copied"));
pDFloatingMessage->setIcon(icon);
pDFloatingMessage->raise();
DMessageManager::instance()->sendMessage(this, pDFloatingMessage);
m_plainTextEdit->copy();
}
void MainWidget::slotExport()
{
QStringList list = QStandardPaths::standardLocations(QStandardPaths::DownloadLocation);
QString download = "";
if (list.size() > 0) {
download = list.at(0);
} else {
QStringList home = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
if (home.size() > 0) {
download = home.at(0) + "/Downloads";
}
}
QString fileName = QFileInfo(m_imgName).completeBaseName();
QString file_path = QFileDialog::getSaveFileName(this, "save as", download + "/" + fileName, "*.txt");
qDebug() << file_path;
QString path = file_path + ".txt";
QFile file(path);
if (file.open(QFile::WriteOnly | QFile::Text)) {
QTextStream out(&file);
out << m_plainTextEdit->document()->toPlainText();
}
}
void MainWidget::setIcons(DGuiApplicationHelper::ColorType themeType)
{
if (themeType == DGuiApplicationHelper::DarkType) {
m_tipIconLabel->setPixmap(QPixmap(":/assets/tip_dark.svg"));
m_tipIconLabel->setFixedSize(QSize(14, 14));
m_copyBtn->setIcon(QIcon(":/assets/copy_dark.svg"));
m_copyBtn->setIconSize(QSize(36, 36));
m_copyBtn->setFlat(true);
m_exportBtn->setIcon(QIcon(":/assets/download_dark.svg"));
m_exportBtn->setIconSize(QSize(36, 36));
m_exportBtn->setFlat(true);
App->setWindowIcon(QIcon(":/assets/appicon_dark.svg"));
DMainWindow *mainWindow = static_cast<DMainWindow *>(this->parent());
if (mainWindow) {
mainWindow->titlebar()->setIcon(QIcon(":/assets/appicon_dark.svg"));
}
if (m_isLoading) {
m_imageview->setForegroundBrush(QColor(0, 0, 0, 150)); //设置场景的前景色,类似于遮罩
}
} else {
m_tipIconLabel->setPixmap(QPixmap(":/assets/tip_light.svg"));
m_tipIconLabel->setFixedSize(QSize(14, 14));
m_copyBtn->setIcon(QIcon(":/assets/copy_light.svg"));
m_copyBtn->setIconSize(QSize(36, 36));
m_copyBtn->setFlat(true);
m_exportBtn->setIcon(QIcon(":/assets/download_light.svg"));
m_exportBtn->setIconSize(QSize(36, 36));
m_exportBtn->setFlat(true);
App->setWindowIcon(QIcon(":/assets/appicon_light.svg"));
DMainWindow *mainWindow = static_cast<DMainWindow *>(this->parent());
if (mainWindow) {
mainWindow->titlebar()->setIcon(QIcon(":/assets/appicon_light.svg"));
}
if (m_isLoading) {
m_imageview->setForegroundBrush(QColor(255, 255, 255, 150)); //设置场景的前景色,类似于遮罩
}
}
} // setupUi