Тег цвета не работает на QPushButtons

Я занимаюсь стилизацией кнопок в своем пользовательском интерфейсе, используя конструктор пользовательского интерфейса в QT Creator 3.0.1 (с QT 4.8). Я пытаюсь, чтобы эти кнопки вели себя как ссылки на веб-сайте — без границ и реагируя на наведение мыши. Вот таблица стилей, которую я сейчас использую:

QPushButton {
    border: none;
    color: #a8a8a8;
}

QPushButton:hover {
    color: #ffffff;
}

Я думал, что это довольно просто, но по какой-то причине тег цвета не работает при наведении курсора. Для проверки я попытался изменить кнопку другими способами, например, изменить цвет фона, и это сработало безупречно. Я также попытался изменить селекторы на что-то более конкретное, включив предка (QWidget QPushButton:hover) и используя идентификатор (QPushButton#templateButton), но ни то, ни другое не сработало.

Это проблема с тегом цвета, или я упускаю что-то очевидное?


person Anthony Hilyard    schedule 29.07.2015    source источник
comment
doc.qt.io/qt-4.8/   -  person phyatt    schedule 30.07.2015
comment
doc.qt.io/qt-4.8/ doc.qt.io/qt-4.8/stylesheet- examples.html#customizing-qcheckbox пробовали ли вы указывать наведение при отмеченном и снятом флажке, как с флажком? Я думаю, что зависание может оказаться в этих псевдосостояниях, потому что qpushbutton поддерживает эти состояния...   -  person phyatt    schedule 30.07.2015
comment
Я просмотрел документацию, но кажется, что они никогда не используют цветовой тег в состояниях наведения для QPushButton. Использование checked и unchecked, похоже, ничего не делает.   -  person Anthony Hilyard    schedule 30.07.2015


Ответы (3)


Также можно использовать QLabel для создания интерактивных ссылок. Создайте собственный класс ClickableLabel, который наследует QLabel и обрабатывает события mousePressEvents.

class ClickableLabel : public QLabel
{
    Q_OBJECT
public:
    explicit ClickableLabel(QWidget *parent = 0);

signals:
    void clicked();

protected:
    void mousePressEvent(QMouseEvent * event) ;
};

И

void ClickableLabel::mousePressEvent(QMouseEvent * event)
{
    Q_UNUSED(event);
    emit clicked();
}

Также, вероятно, можно обрабатывать события наведения мыши и изменять стиль метки на их основе. Однако я не проверял это.

Это решение было скопировано откуда-то, но я уже не помню первоисточник.

person Petri Pyöriä    schedule 30.07.2015
comment
Я собираюсь пойти с этим решением. QPushButton у меня просто не работает. - person Anthony Hilyard; 30.07.2015

Попробуй это :

#templateButton {
    border: 0px;
    color: #a8a8a8;
    text-decoration: underline;
    text-align: right;
}

#templateButton:hover {
    color: #FFFFFF;
}
person haris    schedule 30.07.2015
comment
Единственная разница, которую я вижу, это оформление текста и выравнивание текста, не могли бы вы немного объяснить свой ответ? Кстати, не работает. - person Anthony Hilyard; 30.07.2015

@ Энтони Хильярд, я покажу вам несколько фотографий, поэтому я опубликую здесь еще один ответ. 1.normal введите здесь описание изображения

2.hover введите здесь описание изображения

#pushButtonForgetPassword { border: none; color: #0066ff; text-decoration: underline; text-align: right; }

#pushButtonForgetPassword:hover { color: #FFFFFF; }

pushButtonForgetPassword будет идентификатором моей кнопки ссылки

person haris    schedule 31.07.2015