Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Как сделать масштабируемый текст на QLabel?

#qt5 #qt #cpp


Я пишу игру Угадай "ЧтоУгодноПоКартинке". У меня есть картинка и шесть кнопок. Три
вверху и три внизу. 
Хочу сделать кнопки:

Прозрачными
WordWrap
Относительный размер шрифта. Шрифт масштабируемый при увеличении/уменьшение размеров
окна.
При нажатии на кнопку цвет текста и цвет фона кнопки меняется

Все сделано кроме 4 пункта. Все очень коряво работает.
Помогите привести все человеческий вид.
#ifndef MYBUTTON_H
#define MYBUTTON_H

#include 
#include 
#include 

class MyButton : public QPushButton
{
    Q_OBJECT
public:
    explicit MyButton(QWidget *parent = 0);

    QString text() const;
    void setText(const QString& text);
    void setFont(const QFont& font_);

signals:

public slots:

private:
    QLabel* label;
    QHBoxLayout* layout;
    QFont font;

protected:
   virtual void resizeEvent(QResizeEvent *event);
};

#endif // MYBUTTON_H

#include "mybutton.h"

MyButton::MyButton(QWidget *parent) :
    QPushButton(parent)
{
    label = new QLabel;
    label->setWordWrap(true);
    label->setMouseTracking(false);
    label->setTextInteractionFlags(Qt::NoTextInteraction);
    label->setAlignment(Qt::AlignCenter);
    label->setStyleSheet(
                "QLabel {"
                "color: blue;"
                "background-color: rgba(255, 255, 255, 10);"
                "}"
                );

    label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);

    this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    this->setFlat(true);

    layout = new QHBoxLayout;
    layout->addWidget(label);
    layout->setMargin(1);
    layout->setSpacing(1);

    label->setFont(font);

    this->setLayout(layout);
}

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

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

void MyButton::setFont(const QFont &font_)
{
    font = font_;
    label->setFont(font);
}

void MyButton::resizeEvent(QResizeEvent *event)
{
    int pixelsHeight = this->size().height()/2;
    if(pixelsHeight > 24) pixelsHeight = 24;
    if(pixelsHeight < 8) pixelsHeight = 8;

    font.setPixelSize(pixelsHeight);
    label->setFont(font);
}
    


Ответы

Ответ 1



4.При нажатии на кнопку цвет текста и цвет фона кнопки меняется Поставьте кнопке setCheckable(true) и проверяйте bool isChecked() и задавайте цвет фона в слоте обработки клика по кнопке. Либо цвет можно задать через setStyleSheet() (что я считаю более правильным вариантом). Сам текст стайлшита: QPushButton::checked { color: rgb(255, 255, 0); // цвет текста желтый background-color: rgba(255, 50, 50, 90) // красный полупрозрачный фон rgba } QPushButton { color: rgb(255, 255, 0); // цвет текста желтый background-color: rgba(0, 255, 0, 90) // зеленый полупрозрачный фон rgba } Все данные параметры можно задавать как в коде, так и в редакторе форм QtCreator.

Комментариев нет:

Отправить комментарий