Advertisement
Guest User

Untitled

a guest
May 25th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. class FormattedLabel : public QLabel
  2. {
  3.     Q_OBJECT
  4. public:
  5.     using FormatCallback = std::function<QString(const QString&)>;
  6.  
  7.     FormattedLabel(const FormatCallback& format_callback = FormatCallback(), QWidget* parent = nullptr)
  8.         : QLabel(parent), m_format_callback(format_callback) {}
  9.  
  10.     void set_format_callback(const FormatCallback& format_callback)
  11.     {
  12.         m_format_callback = format_callback;
  13.         update_text();
  14.     }
  15. protected:
  16.     void paintEvent(QPaintEvent* event) override
  17.     {
  18.         const QString& current_text = text();
  19.         if (current_text != m_formatted_text)
  20.         {
  21.             m_plain_text = current_text;
  22.             update_text();
  23.         }
  24.  
  25.         QLabel::paintEvent(event);
  26.     }
  27.     void resizeEvent(QResizeEvent* event) override
  28.     {
  29.         QLabel::resizeEvent(event);
  30.         const QString& current_text = text();
  31.         if (current_text != m_formatted_text)
  32.         {
  33.             m_plain_text = current_text;
  34.         }
  35.         update_text();
  36.     }
  37. private:
  38.     void update_text()
  39.     {
  40.         if (!m_format_callback)
  41.         {
  42.             return;
  43.         }
  44.        
  45.         m_formatted_text = m_format_callback(m_plain_text);
  46.         setText(m_formatted_text);
  47.     }
  48.  
  49.     QString m_formatted_text;
  50.     QString m_plain_text;
  51.     FormatCallback m_format_callback;
  52. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement