#include "graphicsItem/handleText.h" #include #include #include HandleText::HandleText(QGraphicsItem *parent) : ItemControlHandle(parent) ,_font(QFont()) ,_proxy(nullptr) { _editable = true; _boundingRect = QRectF(-TEXT_WIDTH*0.5,-TEXT_WIDTH*0.5,TEXT_WIDTH,TEXT_HEIGHT); } HandleText::~HandleText() { } void HandleText::setText(QString str) { _text = str; QFontMetrics fontMetrics(_font); _boundingRect = fontMetrics.boundingRect(_text); int w = _boundingRect.width(); int h = _boundingRect.height(); _boundingRect.moveTo(QPointF(-w*0.5,-h*0.5)); } QString HandleText::getText() const { return _text; } void HandleText::creatEditor() { if(!_editable) return; if(!_proxy) _proxy = new QGraphicsProxyWidget(this); _proxy->setVisible(true); QLineEdit *editor = new QLineEdit(); editor->setText(_text); editor->resize(boundingRect().size().toSize()*1.5); _proxy->setWidget(editor); // 将文本编辑的更改连接到文本项 connect(editor, &QLineEdit::textChanged, this, [this, editor]() { //_text = editor->text(); setText(editor->text()); }); // 完成编辑后,删除QTextEdit connect(editor, &QLineEdit::editingFinished, this, [this, editor]() { //_text = editor->text(); setText(editor->text()); emit editFinish(editor->text()); _proxy->setVisible(false); }); } void HandleText::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { painter->setPen(Qt::blue); painter->setBrush(Qt::blue); painter->setRenderHint(QPainter::TextAntialiasing, true); int w = _boundingRect.width(); int h = _boundingRect.height(); painter->drawText(QPointF(-w*0.5,h*0.5),_text); } QRectF HandleText::boundingRect() const { return _boundingRect; }