QPushButton z tekstem zawierajacym znaki formatujące

QPushButton z tekstem zawierajacym znaki formatujące
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 dni
  • Postów:2100
0

Niektóre komponenty Qt obsługują tekst zawierający HTML np.
<h2><i>Load</i><font color=red>System</font></h2>

ChatGPT przekonywał mnie ze QPushButton też obsługuje HTML
co nie jest niestety prawdą niestety

Jak to rozwiązać ? I dodać do QPushButton rysowanie etykiety w wersji HTML ?

  • dodać QLabel w środku QPushButton
  • paintEvent override ...

--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:5 minut
  • Lokalizacja:Szczecin
1

Może QLabel i przeładować klikanie?


MasterBLB
  • Rejestracja:około 19 lat
  • Ostatnio:8 dni
  • Lokalizacja:Warszawa
  • Postów:1454
1

Niestety Bracie @Marius.Maximus , sądząc po źródłach Qt zrobili tego QPushButtona nie tak, jakby logika nakazywała - czyli jakiś widget parent jako tło + 1-2 QLabele na ikonkę i tekst. Zatem chyba najprościej będzie stworzyć CustomButtona z przeładowanymi metodami setText i zapewne setIcon, który by zawierał QLabela z przezroczystym tłem i przepuszczaniem zdarzeń myszy do parenta. Co do wewnętrznego layoutu to weź też pod uwagę, aby jeśli jest pokazywana ikona to tekst QLabela powinien być odsunięty od lewej krawędzi; ale w znakomitej większości przypadków sprawę powinien załatwić Qt::AlignHCenter na QLabelu.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 dni
  • Postów:2100
0

nawet layout okazał się zbędny:

Kopiuj
#pragma once

#include <QWidget>
#include <QPushButton>
#include <QLabel>

class TextPushButton : public QPushButton
{
    Q_OBJECT

public:
    explicit TextPushButton(QWidget *parent = nullptr) : QPushButton(parent)
    {
        label = new QLabel(this);
        label->setAlignment(Qt::AlignCenter);
        label->setAttribute(Qt::WA_TranslucentBackground);
    }

    explicit TextPushButton(QWidget *parent = nullptr, const QString &str = "" ) : QPushButton(parent)
    {
        label = new QLabel(this);
        label->setAlignment(Qt::AlignCenter);
        label->setAttribute(Qt::WA_TranslucentBackground);
        setText(str);
    }

    Qt::TextFormat textFormat() const { return label->textFormat();};
    void setTextFormat(Qt::TextFormat format) { label->setTextFormat(format); };

    void setStyleSheetLabel(const QString& styleSheet){ label->setStyleSheet(styleSheet);};
    QString styleSheetLabel() const { return label->styleSheet();};


    void setText(const QString &text) { label->setText(text); }

    QString text() const { return label->text(); }

protected:
    void resizeEvent(QResizeEvent *event) override
    {
        QSize labelSize = label->sizeHint();
        int labelX = (width() - labelSize.width()) / 2;
        int labelY = (height() - labelSize.height()) / 2;
        label->setGeometry(labelX, labelY, labelSize.width(), labelSize.height());
    }

private:
    QLabel *label;
};

--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.