#include "dialog_imageeditor.h" #include "ui_dialog_imageeditor.h" #include "graphicsscene.h" #include #include 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()); }