Qт - текст кнопкой QPushButton форматирования

У меня есть QPushButton, и на этом у меня есть текст и значок. Я хочу, чтобы текст на кнопке был жирным и красным. Посмотрел на другие форумы, погуглил и потерял надежду. Кажется, нет способа сделать это, если кнопка имеет значок (конечно, если вы не создаете новый значок, который является текстом+бывший значок). Это единственный способ? У кого-нибудь есть идея получше?

3 ответов


вам действительно не нужно подкласс, чтобы изменить форматирование вашей кнопки, а использовать таблицы стилей, например

QPushButton {
    font-size: 18pt;
    font-weight: bold;
    color: #ff0000;
}

применение этого к кнопке, которую вы хотите изменить, сделает текст кнопок 18pt, полужирным и красным. Вы можете подать заявку через widget->setStyleSheet()

применение этого к виджету в иерархии выше будет стиль все кнопки под,таблица стилей QT механизм очень гибкий и довольно хорошо документирован.

Вы можете установить таблицы стилей в дизайнере тоже, это будет стиль виджета, который вы редактируете немедленно


вы делаете подкласс "QPushbutton" , а затем переопределяете событие paint, там вы изменяете текст по своему желанию.

вот это

class button : public QPushButton
    {
    Q_OBJECT

public:
    button(QWidget *parent = 0)
        {

        }
    ~button()
        {

        }

    void paintEvent(QPaintEvent *p2)
        {

        QPushButton::paintEvent(p2);

            QPainter paint(this);
            paint.save();
            QFont sub(QApplication::font());
            sub.setPointSize(sub.pointSize() + 7);
            paint.setFont(sub);
            paint.drawText(QPoint(300,300),"Hi");
            paint.restore();

        }
    };

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);


    button b1;
    b1.showMaximized();
    return a.exec();
}

вы можете подкласс QLabel и полностью выбросить все его события мыши (так что они достигают родителя). Затем обрешетка QPushButton, установить макет на нем и в этом макете вставить QLabel с форматированным текстом. Вы получаете кнопку, которая содержит QLabel и является кликабельной. (Любой виджет Qt может иметь набор макетов, включая те, которые вы никогда не ожидали, что они могут.)