// Header //////////////////////////////////////////////
class ElidedLabel
: public QLabel{
Q_OBJECT
Q_PROPERTY(bool elided READ isElided NOTIFY elisionChanged)
Q_PROPERTY(Qt::TextElideMode elideMode READ getElideMode WRITE setElideMode)
public:
ElidedLabel
(QWidget *parent
= 0, Qt
::WindowFlags f
= 0);
ElidedLabel
(const QString &text, Qt
::TextElideMode mode
= Qt
::ElideMiddle,
QWidget *parent
= 0, Qt
::WindowFlags f
= 0);
const QString & text
() const { return content;
} Qt::TextElideMode & getElideMode() {return m_elideMode;}
bool isElided() const { return m_elided; }
protected:
public slots:
void setElideMode(const Qt::TextElideMode elideMode){m_elideMode = elideMode;}
signals:
void elisionChanged(bool elided);
private:
bool m_elided;
Qt::TextElideMode m_elideMode;
};
// Class ///////////////////////////////////////////////////
ElidedLabel
::ElidedLabel(QWidget *parent, Qt
::WindowFlags f
) , m_elided(false)
, m_elideMode(Qt::ElideMiddle)
{
}
ElidedLabel
::ElidedLabel(const QString &text, Qt
::TextElideMode mode,
QWidget *parent, Qt
::WindowFlags f
) , m_elided(false)
, m_elideMode(mode)
, content(text)
{
}
{
// FIXME ElidedLabel resize not working properly (not called). On full expansion it will no longer collapse.
content = elideText(content_long, event->size().width());
}
void ElidedLabel
::setText(const QString &text
) {
content_long = text;
content = elideText(content_long, width());
}
{
QString elidedText
= fontMetrics
().
elidedText(text, m_elideMode, width
);
m_elided = elidedText != text;
return elidedText;
}
// Header //////////////////////////////////////////////
class ElidedLabel : public QLabel
{
Q_OBJECT
Q_PROPERTY(bool elided READ isElided NOTIFY elisionChanged)
Q_PROPERTY(Qt::TextElideMode elideMode READ getElideMode WRITE setElideMode)
public:
ElidedLabel(QWidget *parent = 0, Qt::WindowFlags f = 0);
ElidedLabel(const QString &text, Qt::TextElideMode mode = Qt::ElideMiddle, QWidget *parent = 0, Qt::WindowFlags f = 0);
const QString & text() const { return content; }
Qt::TextElideMode & getElideMode() {return m_elideMode;}
bool isElided() const { return m_elided; }
protected:
virtual void resizeEvent(QResizeEvent *event);
public slots:
void setText(const QString &text);
void setElideMode(const Qt::TextElideMode elideMode){m_elideMode = elideMode;}
QString elideText(QString text, int w);
signals:
void elisionChanged(bool elided);
private:
bool m_elided;
Qt::TextElideMode m_elideMode;
QString content, content_long;
};
// Class ///////////////////////////////////////////////////
ElidedLabel::ElidedLabel(QWidget *parent, Qt::WindowFlags f)
: QLabel(parent,f)
, m_elided(false)
, m_elideMode(Qt::ElideMiddle)
{
}
ElidedLabel::ElidedLabel(const QString &text, Qt::TextElideMode mode, QWidget *parent, Qt::WindowFlags f)
: QLabel(parent,f)
, m_elided(false)
, m_elideMode(mode)
, content(text)
{
}
void ElidedLabel::resizeEvent(QResizeEvent *event)
{
// FIXME ElidedLabel resize not working properly (not called). On full expansion it will no longer collapse.
QLabel::resizeEvent(event);
content = elideText(content_long, event->size().width());
QLabel::setText(content);
}
void ElidedLabel::setText(const QString &text)
{
content_long = text;
content = elideText(content_long, width());
QLabel::setText(content);
}
QString ElidedLabel::elideText(QString text, int width)
{
QString elidedText = fontMetrics().elidedText(text, m_elideMode, width);
m_elided = elidedText != text;
return elidedText;
}
To copy to clipboard, switch view to plain text mode
Bookmarks