1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #include "CTextItem.h"
- #include <QKeyEvent>
- #include <QGraphicsSceneMouseEvent>
- #include <QTextDocument>
- #include <QDebug>
- 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)
- {
- 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;
- }
|