Elided Label: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Add "cleanup" tag)
(Decode HTML entity names)
Line 25: Line 25:
public:
public:
  ElidedLabel(QWidget '''parent = 0, Qt::WindowFlags f = 0);
  ElidedLabel(QWidget '''parent = 0, Qt::WindowFlags f = 0);
  ElidedLabel(const QString &txt, QWidget''' parent = 0, Qt::WindowFlags f = 0);
  ElidedLabel(const QString &txt, QWidget''' parent = 0, Qt::WindowFlags f = 0);
  ElidedLabel(const QString &txt,
  ElidedLabel(const QString &txt,
  Qt::TextElideMode elideMode = Qt::ElideRight,
  Qt::TextElideMode elideMode = Qt::ElideRight,
  QWidget * parent = 0,
  QWidget * parent = 0,
Line 42: Line 42:


public: // QLabel overrides
public: // QLabel overrides
  void setText(const QString &);
  void setText(const QString &);


protected: // QLabel overrides
protected: // QLabel overrides
Line 72: Line 72:
}
}


ElidedLabel::ElidedLabel(const QString &txt, QWidget *parent, Qt::WindowFlags f)
ElidedLabel::ElidedLabel(const QString &txt, QWidget *parent, Qt::WindowFlags f)
  : QLabel(txt, parent, f) , elideMode_(Qt::ElideRight)
  : QLabel(txt, parent, f) , elideMode_(Qt::ElideRight)
{
{
}
}


ElidedLabel::ElidedLabel(const QString &txt, Qt::TextElideMode elideMode,
ElidedLabel::ElidedLabel(const QString &txt, Qt::TextElideMode elideMode,
  QWidget *parent, Qt::WindowFlags f) : QLabel(txt, parent, f)
  QWidget *parent, Qt::WindowFlags f) : QLabel(txt, parent, f)
  , elideMode_(elideMode)
  , elideMode_(elideMode)
Line 83: Line 83:
}
}


void ElidedLabel::setText(const QString &txt) {
void ElidedLabel::setText(const QString &txt) {
  QLabel::setText(txt);
  QLabel::setText(txt);
  cacheElidedText(geometry().width());
  cacheElidedText(geometry().width());

Revision as of 17:12, 12 March 2015

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

Just call this function and you're good to go.

//! Set the elide mode used for displaying text.
 void setElideMode(Qt::TextElideMode elideMode) {
 elideMode_ = elideMode;
 updateGeometry();
 }
#ifndef ELIDEDLABEL_H
#define ELIDEDLABEL_H

#include <QLabel>

/*
MIT - Yash : Speedovation.com [ Picked from internet and modified. if owner needs to add or change license do let me know.]
*/

class ElidedLabel : public QLabel {
 Q_OBJECT

public:
 ElidedLabel(QWidget '''parent = 0, Qt::WindowFlags f = 0);
 ElidedLabel(const QString &txt, QWidget''' parent = 0, Qt::WindowFlags f = 0);
 ElidedLabel(const QString &txt,
 Qt::TextElideMode elideMode = Qt::ElideRight,
 QWidget * parent = 0,
 Qt::WindowFlags f = 0);

public:
 //! Set the elide mode used for displaying text.
 void setElideMode(Qt::TextElideMode elideMode) {
 elideMode_ = elideMode;
 updateGeometry();
 }

//! Get the elide mode currently used to display text.
 Qt::TextElideMode elideMode() const { return elideMode_; }

public: // QLabel overrides
 void setText(const QString &);

protected: // QLabel overrides
 void paintEvent(QPaintEvent ''');
 void resizeEvent(QResizeEvent''');

protected:
 //! Cache the elided text so as to not recompute it every paint event
 void cacheElidedText(int w);

private:
 Qt::TextElideMode elideMode_;
 QString cachedElidedText;
};

#endif // ELIDEDLABEL_HPP
#include "ElidedLabel.h"

#include <QDebug>
#include <QPainter>
#include <QResizeEvent>

ElidedLabel::ElidedLabel(QWidget *parent, Qt::WindowFlags f)
 : QLabel(parent, f) , elideMode_(Qt::ElideRight)
{
 // setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred);
}

ElidedLabel::ElidedLabel(const QString &txt, QWidget *parent, Qt::WindowFlags f)
 : QLabel(txt, parent, f) , elideMode_(Qt::ElideRight)
{
}

ElidedLabel::ElidedLabel(const QString &txt, Qt::TextElideMode elideMode,
 QWidget *parent, Qt::WindowFlags f) : QLabel(txt, parent, f)
 , elideMode_(elideMode)
{
}

void ElidedLabel::setText(const QString &txt) {
 QLabel::setText(txt);
 cacheElidedText(geometry().width());
}

void ElidedLabel::cacheElidedText(int w) {
 cachedElidedText = fontMetrics().elidedText(text(), elideMode_, w, Qt::TextShowMnemonic);
}

void ElidedLabel::resizeEvent(QResizeEvent *e) {
 QLabel::resizeEvent(e);
 cacheElidedText(e->size().width());
}

void ElidedLabel::paintEvent(QPaintEvent *e) {
 if(elideMode_ == Qt::ElideNone) {
 QLabel::paintEvent(e);
 } else {
 QPainter p(this);
 p.drawText(0, 0,
 geometry().width(),
 geometry().height(),
 alignment(),
 cachedElidedText);
 }
}