#include "CTextItem.h" #include #include #include #include CTextItem::CTextItem(QGraphicsItem *parent) : CTextItem(QString(), parent) { } CTextItem::CTextItem(const QString &text, QGraphicsItem *parent) : QGraphicsTextItem(text, parent) { setFlags(QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemIsSelectable); setTextInteractionFlags(Qt::TextEditorInteraction); connect(document(), &QTextDocument::contentsChanged, this, &CTextItem::slotTextChanged); } void CTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton) { //左键双击进入可编辑状态并打开焦点 if (allowEdit()) { emit sigWillBeginEditing(); beginEditing(); } QGraphicsTextItem::mouseDoubleClickEvent(event); } } void CTextItem::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Return: { endEditing(); } } QGraphicsTextItem::keyPressEvent(event); } void CTextItem::beginEditing() { setTextInteractionFlags(Qt::TextEditorInteraction); setFocus(); } void CTextItem::endEditing() { setTextInteractionFlags(Qt::NoTextInteraction); setSelected(false); clearFocus(); if (m_textChanged) { emit sigTextChanged(); m_textChanged = false; } } bool CTextItem::isEditing() const { return (textInteractionFlags() & Qt::TextEditorInteraction) == Qt::TextEditorInteraction; } bool CTextItem::allowEdit() const { return m_allowEdit; } void CTextItem::setAllowEdit(bool a) { m_allowEdit = a; if (a == false) { endEditing(); } } QSizeF CTextItem::textSize(const QString t, qreal width) { qDebug() << __FUNCTION__ << __LINE__ << endl; static CTextItem *i = nullptr; if (i == nullptr) { i = new CTextItem(nullptr); } i->document()->setPlainText(t); i->setTextWidth(width); return i->document()->size(); } void CTextItem::slotTextChanged() { m_textChanged = true; }