#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.
Комментариев нет:
Отправить комментарий