更新图像编辑组件

This commit is contained in:
gb 2022-08-12 15:32:35 +08:00
parent 79d70cb3ba
commit aca2a7673e
2 changed files with 82 additions and 30 deletions

View File

@ -1,4 +1,4 @@
#include "graphicsscene.h"
#include "graphicsscene.h"
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsRectItem>
#include <QGraphicsEllipseItem>
@ -7,26 +7,37 @@
#include <QPen>
#include <QBrush>
#include <QGraphicsView>
#include <typeinfo>
#include <QDebug>
#include <qmath.h>
#include <typeinfo>
#include <QWidget>
GraphicsTextEdit::GraphicsTextEdit(QWidget* parent)
: QTextEdit(parent)
{
viewport()->setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
viewport()->setAttribute(Qt::WA_TranslucentBackground);
//viewport()->setAttribute(Qt::WA_TranslucentBackground);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu);
connect(this, SIGNAL(textChanged()), this, SLOT(on_textChanged()));
setStyleSheet("QTextEdit{background-color: transparent; border: 3px solid red;}");
//setWindowOpacity(0.3);
//setMouseTracking(true);
}
GraphicsTextEdit::~GraphicsTextEdit()
{
}
void GraphicsTextEdit::setDefeaultColor(const QColor& color)
{
m_defeaultColor = color;
setTextColor(m_defeaultColor);
}
#define BORDER_WIDTH 20
void GraphicsTextEdit::on_textChanged()
{
@ -51,6 +62,9 @@ void GraphicsTextEdit::on_textChanged()
if (currentSize != this->size())
resize(currentSize);
if (toPlainText().isEmpty())
setTextColor(m_defeaultColor);
}
GraphicsScene::GraphicsScene(QObject* parent)
@ -72,6 +86,8 @@ void GraphicsScene::setColor(const QColor& color)
{
m_pen.setColor(color);
m_brush.setColor(color);
if (m_edit != nullptr)
m_edit->setDefeaultColor(color);
}
void GraphicsScene::setTextSize(int size)
@ -84,8 +100,24 @@ void GraphicsScene::setLineWidth(int width)
m_pen.setWidth(width);
}
void GraphicsScene::createShape(int flag)
void GraphicsScene::setItemFlag(int flag)
{
if (m_status == CreateText)
{
if (m_activeItem != nullptr)
{
QString text = m_edit->document()->toPlainText();
QFont font = m_edit->font();
removeItem(m_activeItem);
QGraphicsTextItem* item = addText(text, font);
item->setPos(m_edit->mapToParent(QPoint()));
item->setDefaultTextColor(m_pen.color());
delete m_edit;
m_edit = nullptr;
m_activeItem = nullptr;
}
}
if (m_activeItem != nullptr)
{
if (typeid(*m_activeItem) == typeid(QGraphicsProxyWidget))
@ -116,6 +148,7 @@ void GraphicsScene::createShape(int flag)
m_status = CreatePen;
break;
default:
m_status = Normal;
break;
}
}
@ -188,6 +221,9 @@ void GraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
if (m_activeItem == nullptr)
return;
if (!sceneRect().contains(mouseEvent->scenePos()))
return;
if (m_status == CreateRect)
{
QGraphicsRectItem* item = reinterpret_cast<QGraphicsRectItem*>(m_activeItem);
@ -265,36 +301,47 @@ void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
void GraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
if (mouseEvent->button() == Qt::MouseButton::RightButton)
{
QGraphicsScene::mouseReleaseEvent(mouseEvent);
return;
}
m_btn_pressed = 0;
if (m_activeItem != nullptr)
if (typeid(*m_activeItem) != typeid(QGraphicsProxyWidget))
m_activeItem = nullptr;
if (m_status == CreateText)
{
if (typeid(*m_activeItem) == typeid(QGraphicsProxyWidget))
if (m_activeItem != nullptr)
{
QRectF r(m_edit->mapToParent(QPoint()), m_edit->size());
if (!r.contains(mouseEvent->scenePos()))
if (r.contains(mouseEvent->scenePos()))
{
QGraphicsScene::mouseReleaseEvent(mouseEvent);
return;
}
QString text = m_edit->document()->toPlainText();
QFont font = m_edit->font();
removeItem(m_activeItem);
QGraphicsTextItem* item = addText(text, font);
item->setPos(m_edit->mapToParent(QPoint()));
item->setDefaultTextColor(m_pen.color());
}
}
delete m_edit;
m_edit = nullptr;
m_activeItem = nullptr;
}
if (m_status == CreateText)
else
{
if (m_activeItem != nullptr)
if (typeid(*m_activeItem) == typeid(QGraphicsProxyWidget))
return;
m_edit = new GraphicsTextEdit();
m_edit->setTextColor(m_pen.color());
m_edit->setDefeaultColor(m_pen.color());
m_edit->setFont(m_font);
m_edit->setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu);
m_activeItem = addWidget(m_edit, Qt::Widget);
m_activeItem->setPos(mouseEvent->scenePos());
QGraphicsProxyWidget* widget = addWidget(m_edit, Qt::FramelessWindowHint);
widget->setPos(mouseEvent->scenePos());
m_activeItem = widget;
m_edit->setFocus();
}
}
}

View File

@ -1,4 +1,4 @@
#ifndef GRAPHICSSCENE_H
#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H
#include <QGraphicsScene>
@ -14,8 +14,12 @@ public:
~GraphicsTextEdit();
void setDefeaultColor(const QColor& color);
private slots:
void on_textChanged();
private:
QColor m_defeaultColor;
};
class GraphicsScene : public QGraphicsScene
@ -36,6 +40,7 @@ public:
enum
{
None,
Rect,
Ellipse,
Line,
@ -54,7 +59,7 @@ public:
void setLineWidth(int width);
void createShape(int flag);
void setItemFlag(int flag);
void unDo();
private: