parent
de3d0823fb
commit
5340635389
26 changed files with 329 additions and 51 deletions
@ -1,6 +1,68 @@ |
||||
#include "Label.h" |
||||
|
||||
Label::Label() |
||||
#include <QKeyEvent> |
||||
#include <QGraphicsScene> |
||||
|
||||
Label::Label(QGraphicsItem* parent) |
||||
:m_parentItem(parent) |
||||
{ |
||||
// TODO: Find out why I have to call setParentItem each time in recalculateTextAlignment
|
||||
//setParentItem((QGraphicsItem*)m_parent);
|
||||
if(parent->scene() != nullptr) |
||||
parent->scene()->addItem(this); |
||||
} |
||||
|
||||
void Label::setEditable(bool value) |
||||
{ |
||||
if(value) |
||||
setTextInteractionFlags(Qt::TextInteractionFlag::TextEditorInteraction); |
||||
else |
||||
setTextInteractionFlags(Qt::TextInteractionFlag::NoTextInteraction); |
||||
} |
||||
|
||||
void Label::setText(const QString& text) |
||||
{ |
||||
setPlainText(text); |
||||
recalculateTextAlignment(); |
||||
} |
||||
|
||||
QString Label::text() const |
||||
{ |
||||
return toPlainText(); |
||||
} |
||||
|
||||
void Label::alignText(QPointF anchorPos, AlignMode::AlignMode mode) |
||||
{ |
||||
m_textAnchor = anchorPos; |
||||
m_alignMode = mode; |
||||
recalculateTextAlignment(); |
||||
} |
||||
|
||||
void Label::keyPressEvent(QKeyEvent* event) |
||||
{ |
||||
QGraphicsTextItem::keyPressEvent(event); |
||||
|
||||
if(event->isAccepted()) |
||||
recalculateTextAlignment(); |
||||
} |
||||
|
||||
void Label::recalculateTextAlignment() |
||||
{ |
||||
setParentItem(m_parentItem); |
||||
|
||||
if(m_alignMode & AlignMode::Right) |
||||
setX( - boundingRect().width()); |
||||
else if(m_alignMode & AlignMode::HCenter) |
||||
setX( - boundingRect().width() / 2.f); |
||||
else //usually if(m_alignMode & AlignMode::Left)
|
||||
setX(0); |
||||
|
||||
if(m_alignMode & AlignMode::Bottom) |
||||
setY( - boundingRect().height()); |
||||
else if(m_alignMode & AlignMode::VCenter) |
||||
setY( - boundingRect().height() / 2.f); |
||||
else //usually if(m_alignMode & AlignMode::Top)
|
||||
setY(0); |
||||
|
||||
moveBy(m_textAnchor.x(), m_textAnchor.y()); |
||||
} |
||||
|
@ -1,11 +1,30 @@ |
||||
#ifndef LABEL_H |
||||
#define LABEL_H |
||||
|
||||
#include <QGraphicsTextItem> |
||||
#include <QPointF> |
||||
|
||||
class Label : public QGraphicsTextItem |
||||
#include "eAlignMode.h" |
||||
|
||||
class Label : private QGraphicsTextItem |
||||
{ |
||||
public: |
||||
Label(); |
||||
Label(QGraphicsItem* parent); |
||||
|
||||
void setEditable(bool value); |
||||
void setText(const QString& text); |
||||
QString text() const; |
||||
void alignText(QPointF anchorPos, AlignMode::AlignMode mode = AlignMode::Default); |
||||
|
||||
private: |
||||
QGraphicsItem* m_parentItem; |
||||
|
||||
QPointF m_textAnchor; |
||||
AlignMode::AlignMode m_alignMode; |
||||
|
||||
void keyPressEvent(QKeyEvent* event) override; |
||||
|
||||
void recalculateTextAlignment(); |
||||
}; |
||||
|
||||
#endif // LABEL_H
|
||||
|
@ -1,4 +1,21 @@ |
||||
#ifndef EALIGNMODE_H |
||||
#define EALIGNMODE_H |
||||
|
||||
#define mkAlignMode(hPolicy, vPolicy) (AlignMode::AlignMode)(hPolicy | vPolicy) |
||||
|
||||
namespace AlignMode |
||||
{ |
||||
enum AlignMode : int |
||||
{ |
||||
Left = 1, |
||||
Right = 2, |
||||
HCenter = 4, |
||||
Top = 8, |
||||
Bottom = 16, |
||||
VCenter = 32, |
||||
|
||||
Default = Left | Top |
||||
}; |
||||
} |
||||
|
||||
#endif // EALIGNMODE_H
|
||||
|
Loading…
Reference in new issue