Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class FormattedLabel : public QLabel
- {
- Q_OBJECT
- public:
- using FormatCallback = std::function<QString(const QString&)>;
- FormattedLabel(const FormatCallback& format_callback = FormatCallback(), QWidget* parent = nullptr)
- : QLabel(parent), m_format_callback(format_callback) {}
- void set_format_callback(const FormatCallback& format_callback)
- {
- m_format_callback = format_callback;
- update_text();
- }
- protected:
- void paintEvent(QPaintEvent* event) override
- {
- const QString& current_text = text();
- if (current_text != m_formatted_text)
- {
- m_plain_text = current_text;
- update_text();
- }
- QLabel::paintEvent(event);
- }
- void resizeEvent(QResizeEvent* event) override
- {
- QLabel::resizeEvent(event);
- const QString& current_text = text();
- if (current_text != m_formatted_text)
- {
- m_plain_text = current_text;
- }
- update_text();
- }
- private:
- void update_text()
- {
- if (!m_format_callback)
- {
- return;
- }
- m_formatted_text = m_format_callback(m_plain_text);
- setText(m_formatted_text);
- }
- QString m_formatted_text;
- QString m_plain_text;
- FormatCallback m_format_callback;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement