更新图像编辑组件
This commit is contained in:
parent
79d70cb3ba
commit
aca2a7673e
|
@ -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))
|
||||
{
|
||||
QRectF r(m_edit->mapToParent(QPoint()), m_edit->size());
|
||||
if (!r.contains(mouseEvent->scenePos()))
|
||||
{
|
||||
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());
|
||||
}
|
||||
}
|
||||
m_activeItem = nullptr;
|
||||
}
|
||||
if (typeid(*m_activeItem) != typeid(QGraphicsProxyWidget))
|
||||
m_activeItem = nullptr;
|
||||
|
||||
if (m_status == CreateText)
|
||||
{
|
||||
if (m_activeItem != nullptr)
|
||||
if (typeid(*m_activeItem) == typeid(QGraphicsProxyWidget))
|
||||
{
|
||||
QRectF r(m_edit->mapToParent(QPoint()), m_edit->size());
|
||||
if (r.contains(mouseEvent->scenePos()))
|
||||
{
|
||||
QGraphicsScene::mouseReleaseEvent(mouseEvent);
|
||||
return;
|
||||
m_edit = new GraphicsTextEdit();
|
||||
m_edit->setTextColor(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());
|
||||
m_edit->setFocus();
|
||||
}
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_edit = new GraphicsTextEdit();
|
||||
m_edit->setDefeaultColor(m_pen.color());
|
||||
m_edit->setFont(m_font);
|
||||
QGraphicsProxyWidget* widget = addWidget(m_edit, Qt::FramelessWindowHint);
|
||||
widget->setPos(mouseEvent->scenePos());
|
||||
m_activeItem = widget;
|
||||
m_edit->setFocus();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue