QtCanpool 3.3.0
载入中...
搜索中...
未找到
docklabel.cpp
浏览该文件的文档.
1
6#include "docklabel.h"
7#include "dockutils.h"
8
10
11class DockLabelPrivate
12{
13public:
14 QX_DECLARE_PUBLIC(DockLabel)
15public:
16 DockLabelPrivate();
17
18 void elideText(int width);
19 bool isModeElideNone() const;
20public:
21 QString m_text;
22 Qt::TextElideMode m_elideMode = Qt::ElideNone;
23 bool m_isElided = false;
24};
25
26DockLabelPrivate::DockLabelPrivate()
27{
28}
29
30void DockLabelPrivate::elideText(int width)
31{
32 if (isModeElideNone()) {
33 return;
34 }
35 Q_Q(DockLabel);
36 QFontMetrics fm = q->fontMetrics();
37 QString str = fm.elidedText(m_text, m_elideMode, width - q->margin() * 2 - q->indent());
38 if (str == u'\x2026') {
39 str = m_text.at(0);
40 }
41 bool wasElided = m_isElided;
42 m_isElided = str != m_text;
43 if (m_isElided != wasElided) {
44 Q_EMIT q->elidedChanged(m_isElided);
45 }
46 q->QLabel::setText(str);
47}
48
49bool DockLabelPrivate::isModeElideNone() const
50{
51 return Qt::ElideNone == m_elideMode;
52}
53
54QxDock::DockLabel::DockLabel(QWidget *parent, Qt::WindowFlags f)
55 : DockLabel("", parent, f)
56{
57}
58
59QxDock::DockLabel::DockLabel(const QString &text, QWidget *parent, Qt::WindowFlags f)
60 : QLabel(text, parent, f)
61{
63
64 Q_D(DockLabel);
65 if (!text.isEmpty()) {
66 d->m_text = text;
68 }
69}
70
75
76Qt::TextElideMode DockLabel::elideMode() const
77{
78 Q_D(const DockLabel);
79 return d->m_elideMode;
80}
81
82void DockLabel::setElideMode(Qt::TextElideMode mode)
83{
84 Q_D(DockLabel);
85 d->m_elideMode = mode;
86 d->elideText(size().width());
87}
88
90{
91 Q_D(const DockLabel);
92 return d->m_isElided;
93}
94
96{
97 Q_D(const DockLabel);
98#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
99 bool hasPixmap = !pixmap(Qt::ReturnByValue).isNull();
100#else
101 bool hasPixmap = (pixmap() != nullptr);
102#endif
103 if (hasPixmap || d->isModeElideNone()) {
104 return QLabel::minimumSizeHint();
105 }
106 const QFontMetrics &fm = fontMetrics();
107#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
108 QSize size(fm.horizontalAdvance(d->m_text.left(2) + u'\x2026'), fm.height());
109#else
110 QSize size(fm.width(d->m_text.left(2) + u'\x2026'), fm.height());
111#endif
112 return size;
113}
114
116{
117 Q_D(const DockLabel);
118#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
119 bool hasPixmap = !pixmap(Qt::ReturnByValue).isNull();
120#else
121 bool hasPixmap = (pixmap() != nullptr);
122#endif
123 if (hasPixmap || d->isModeElideNone()) {
124 return QLabel::sizeHint();
125 }
126 const QFontMetrics &fm = fontMetrics();
127#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
128 QSize size(fm.horizontalAdvance(d->m_text), QLabel::sizeHint().height());
129#else
130 QSize size(fm.width(d->m_text), QLabel::sizeHint().height());
131#endif
132 return size;
133}
134
135QString DockLabel::text() const
136{
137 Q_D(const DockLabel);
138 return d->m_text;
139}
140
141void DockLabel::setText(const QString &text)
142{
143 Q_D(DockLabel);
144 d->m_text = text;
145 if (d->isModeElideNone()) {
146 QLabel::setText(text);
147 } else {
149 d->elideText(this->size().width());
150 }
151}
152
154{
155 QLabel::mouseReleaseEvent(e);
156 if (e->button() != Qt::LeftButton) {
157 return;
158 }
159 Q_EMIT clicked();
160}
161
162void DockLabel::resizeEvent(QResizeEvent *e)
163{
164 Q_D(DockLabel);
165 if (!d->isModeElideNone()) {
166 d->elideText(e->size().width());
167 }
168 QLabel::resizeEvent(e);
169}
170
172{
173 Q_EMIT doubleClicked();
174 QLabel::mouseDoubleClickEvent(e);
175}
176
virtual void mouseDoubleClickEvent(QMouseEvent *e) override
Qt::TextElideMode elideMode() const
Definition docklabel.cpp:76
bool isElided() const
Definition docklabel.cpp:89
virtual ~DockLabel()
Definition docklabel.cpp:71
virtual QSize sizeHint() const override
void setText(const QString &text)
virtual void mouseReleaseEvent(QMouseEvent *e) override
DockLabel(QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags())
Definition docklabel.cpp:54
virtual QSize minimumSizeHint() const override
Definition docklabel.cpp:95
virtual void resizeEvent(QResizeEvent *e) override
QString text() const
void setElideMode(Qt::TextElideMode mode)
Definition docklabel.cpp:82
void setToolTip(QObjectPtr obj, const QString &tip)
Definition dockutils.h:56
#define QX_INIT_PRIVATE(Class)
#define QX_DECLARE_PUBLIC(Class)
#define QX_FINI_PRIVATE()
#define QX_DOCK_END_NAMESPACE
#define QX_DOCK_BEGIN_NAMESPACE
QColor text