#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); } void CTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton) { //左键双击进入可编辑状态并打开焦点 if (allowEdit()) { beginEditing(); } QGraphicsTextItem::mouseDoubleClickEvent(event); } } void CTextItem::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Return: { endEditing(); emit sigTextChanged(); } } QGraphicsTextItem::keyPressEvent(event); } void CTextItem::beginEditing() { setTextInteractionFlags(Qt::TextEditorInteraction); setFocus(); } void CTextItem::endEditing() { setTextInteractionFlags(Qt::NoTextInteraction); setSelected(false); clearFocus(); } 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; 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(); }