CTextItem.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "CTextItem.h"
  2. #include <QKeyEvent>
  3. #include <QGraphicsSceneMouseEvent>
  4. #include <QDebug>
  5. CTextItem::CTextItem(QGraphicsItem *parent) : CTextItem(QString(), parent) { }
  6. CTextItem::CTextItem(const QString &text, QGraphicsItem *parent) : QGraphicsTextItem(text, parent)
  7. {
  8. setFlags(QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemIsSelectable);
  9. setTextInteractionFlags(Qt::TextEditorInteraction);
  10. }
  11. void CTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
  12. {
  13. if (event->button() == Qt::LeftButton) { //左键双击进入可编辑状态并打开焦点
  14. if (allowEdit()) {
  15. beginEditing();
  16. }
  17. QGraphicsTextItem::mouseDoubleClickEvent(event);
  18. }
  19. }
  20. void CTextItem::keyPressEvent(QKeyEvent *event)
  21. {
  22. switch (event->key()) {
  23. case Qt::Key_Return: {
  24. endEditing();
  25. emit sigTextChanged();
  26. }
  27. }
  28. QGraphicsTextItem::keyPressEvent(event);
  29. }
  30. void CTextItem::beginEditing()
  31. {
  32. setTextInteractionFlags(Qt::TextEditorInteraction);
  33. setFocus();
  34. }
  35. void CTextItem::endEditing()
  36. {
  37. setTextInteractionFlags(Qt::NoTextInteraction);
  38. setSelected(false);
  39. clearFocus();
  40. }
  41. bool CTextItem::isEditing() const
  42. {
  43. return (textInteractionFlags() & Qt::TextEditorInteraction) == Qt::TextEditorInteraction;
  44. }
  45. bool CTextItem::allowEdit() const
  46. {
  47. return m_allowEdit;
  48. }
  49. void CTextItem::setAllowEdit(bool a)
  50. {
  51. m_allowEdit = a;
  52. endEditing();
  53. }