code_app/app/scanner/dialog_imageeditor.cpp

207 lines
6.1 KiB
C++

#include "dialog_imageeditor.h"
#include "ui_dialog_imageeditor.h"
#include "graphicsscene.h"
#include <QColorDialog>
#include <app_cfg.h>
int m_textSize[] = { 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 28, 72 };
int m_lineWidth[] = { 1, 3, 5, 8 };
float m_scaled[] = { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.8f, 1.0f, 1.2f, 1.5f, 2.0f, 2.5f, 4.0f, 6.0f };
Dialog_ImageEditor::Dialog_ImageEditor(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog_ImageEditor)
, m_scene(new GraphicsScene())
, m_index_scaled(7)
{
ui->setupUi(this);
setWindowFlags(Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
for (int i = 0; i < ui->comboBox_textSize->count(); i++)
ui->comboBox_textSize->setItemData(i, m_textSize[i]);
for (int i = 0; i < ui->comboBox_lineWidth->count(); i++)
ui->comboBox_lineWidth->setItemData(i, m_lineWidth[i]);
ui->graphicsView->setScene(m_scene);
m_clrName = getCfgValue("imageEditor", "color", QString("red"));
ui->btn_color->setStyleSheet(QString("QPushButton{background-color:%1;border:1px solid %2}").arg(m_clrName).arg(m_clrName));
ui->comboBox_lineWidth->setCurrentIndex(getCfgValue("imageEditor", "lineWidth", 0));
ui->comboBox_textSize->setCurrentIndex(getCfgValue("imageEditor", "textSize", 0));
ui->comboBox_textSize->setFixedWidth(80);
ui->comboBox_lineWidth->setFixedWidth(120);
}
Dialog_ImageEditor::~Dialog_ImageEditor()
{
delete ui;
}
void Dialog_ImageEditor::setImage(const QImage &image)
{
m_imageSize = image.size();
m_dpi_x = image.dotsPerMeterX();
m_dpi_y = image.dotsPerMeterY();
m_scene->addPixmap(QPixmap::fromImage(image));
}
QImage Dialog_ImageEditor::exportImage()
{
QImage image(m_imageSize, QImage::Format_RGB888);
image.setDotsPerMeterX(m_dpi_x);
image.setDotsPerMeterY(m_dpi_y);
QPainter painter(&image);
m_scene->render(&painter); //关键函数
return image;
}
void Dialog_ImageEditor::on_btn_rect_clicked(bool checked)
{
if (checked)
{
m_scene->createShape(GraphicsScene::Rect);
ui->btn_arrow->setChecked(false);
//ui->btn_rect->setChecked(false);
ui->btn_ellipse->setChecked(false);
ui->btn_text->setChecked(false);
ui->btn_line->setChecked(false);
ui->btn_pen->setChecked(false);
}
}
void Dialog_ImageEditor::on_btn_ellipse_clicked(bool checked)
{
if (checked)
{
m_scene->createShape(GraphicsScene::Ellipse);
ui->btn_arrow->setChecked(false);
ui->btn_rect->setChecked(false);
//ui->btn_ellipse->setChecked(false);
ui->btn_text->setChecked(false);
ui->btn_line->setChecked(false);
ui->btn_pen->setChecked(false);
}
}
void Dialog_ImageEditor::on_btn_line_clicked(bool checked)
{
if (checked)
{
m_scene->createShape(GraphicsScene::Line);
ui->btn_arrow->setChecked(false);
ui->btn_rect->setChecked(false);
ui->btn_ellipse->setChecked(false);
ui->btn_text->setChecked(false);
//ui->btn_line->setChecked(false);
ui->btn_pen->setChecked(false);
}
}
void Dialog_ImageEditor::on_btn_text_clicked(bool checked)
{
if (checked)
{
m_scene->createShape(GraphicsScene::Text);
ui->btn_arrow->setChecked(false);
ui->btn_rect->setChecked(false);
ui->btn_ellipse->setChecked(false);
//ui->btn_text->setChecked(false);
ui->btn_line->setChecked(false);
ui->btn_pen->setChecked(false);
}
}
void Dialog_ImageEditor::on_btn_arrow_clicked(bool checked)
{
if (checked)
{
m_scene->createShape(GraphicsScene::Arrow);
//ui->btn_arrow->setChecked(false);
ui->btn_rect->setChecked(false);
ui->btn_ellipse->setChecked(false);
ui->btn_text->setChecked(false);
ui->btn_line->setChecked(false);
ui->btn_pen->setChecked(false);
}
}
void Dialog_ImageEditor::on_btn_pen_clicked(bool checked)
{
if (checked)
{
m_scene->createShape(GraphicsScene::Pen);
ui->btn_arrow->setChecked(false);
ui->btn_rect->setChecked(false);
ui->btn_ellipse->setChecked(false);
ui->btn_text->setChecked(false);
ui->btn_line->setChecked(false);
//ui->btn_pen->setChecked(false);
}
}
void Dialog_ImageEditor::on_btn_color_clicked()
{
QColorDialog dlg;
if (!dlg.exec())
return;
m_clrName = dlg.selectedColor().name();
ui->btn_color->setStyleSheet(QString("QPushButton{background-color:%1;border:1px solid %2}").arg(m_clrName).arg(m_clrName));
m_scene->setColor(dlg.selectedColor());
}
void Dialog_ImageEditor::on_comboBox_lineWidth_currentIndexChanged(int index)
{
m_scene->setLineWidth(ui->comboBox_lineWidth->itemData(index).toInt());
}
void Dialog_ImageEditor::on_comboBox_textSize_currentIndexChanged(int index)
{
m_scene->setTextSize(ui->comboBox_textSize->itemData(index).toInt());
}
void Dialog_ImageEditor::on_btn_undo_clicked()
{
m_scene->unDo();
}
void Dialog_ImageEditor::on_btn_ok_clicked()
{
saveCfgValue("imageEditor", "lineWidth", ui->comboBox_lineWidth->currentIndex());
saveCfgValue("imageEditor", "textSize", ui->comboBox_textSize->currentIndex());
saveCfgValue("imageEditor", "color", m_clrName);
accept();
}
void Dialog_ImageEditor::on_btn_cancel_clicked()
{
reject();
}
void Dialog_ImageEditor::on_btn_zoomIn_clicked()
{
m_index_scaled++;
QTransform tran;
tran.scale(m_scaled[m_index_scaled], m_scaled[m_index_scaled]);
ui->graphicsView->setTransform(tran);
ui->btn_zoomOut->setEnabled(m_index_scaled > 0);
ui->btn_zoomIn->setEnabled(m_index_scaled + 1 < sizeof(m_scaled) / sizeof(m_scaled[0]));
}
void Dialog_ImageEditor::on_btn_zoomOut_clicked()
{
m_index_scaled--;
QTransform tran;
tran.scale(m_scaled[m_index_scaled], m_scaled[m_index_scaled]);
ui->graphicsView->setTransform(tran);
ui->btn_zoomOut->setEnabled(m_index_scaled > 0);
ui->btn_zoomIn->setEnabled(m_index_scaled + 1 < sizeof(m_scaled) / sizeof(m_scaled[0]));
}
void Dialog_ImageEditor::on_btn_zoom_clicked()
{
ui->graphicsView->setTransform(QTransform());
}