207 lines
6.1 KiB
C++
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());
|
|
}
|