Навигация по таблице стилей Qt QPushButton
У меня есть следующая таблица стилей кнопок:
QPushButton:hover{
background: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 : 1, stop : 0.0 #ffd9aa,
stop : 0.5 #ffbb6e, stop : 0.55 #feae42, stop : 1.0 #fedb74);
}
QPushButton {
border: 1px solid #6593cf;
border-radius: 2px;
padding: 5px 15px 2px 5px;
background: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 : 1, stop : 0.0 #f5f9ff,
stop : 0.5 #c7dfff, stop : 0.55 #afd2ff, stop : 1.0 #c0dbff);
color: #006aff;
font: bold large "Arial";
height: 30px;
}
QPushButton:pressed {
background: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 : 1, stop : 0.0 #c0dbff,
stop : 0.5 #cfd26f, stop : 0.55 #c7df6f, stop : 1.0 #f5f9ff);
padding-top: 2px;
padding-left: 3px;
}
QPushButton:on {
background: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 : 1, stop : 0.0 #5AA72D,
stop : 0.5 #B3E296, stop : 0.55 #B3E296, stop : 1.0 #f5f9ff);
padding-top: 2px;
padding-left: 3px;
}
QPushButton:disabled {
background: transparent #e5e9ee;
padding-top: 2px;
padding-left: 3px;
color: black;
}
У меня есть кнопка. При нажатии боковой виджет изменяется. Таким образом, кнопка получает нажатый стиль, а когда я отпускаю - стиль наведения. Кроме того, размер виджета изменяется, и кнопка "следует" за виджетом. Проблема в том, что кнопка сохраняет состояние наведения и теряет его, когда я делаю какое-то движение с помощью мыши. Это ошибка из qt или я что-то пропустил в коде таблицы стилей.
Я сделал анимированный GIF, показывающий ситуацию:
Спасибо
1 ответ
Вы можете сказать, что это ошибка в Qt. Я бы сказал, что это своего рода ошибки, вызванные правильной логикой. Судите сами. Hover
состояние определяется WA_UnderMouse
атрибут виджета. Этот атрибут устанавливается приложением:
if ((e->type() == QEvent::Enter || e->type() == QEvent::DragEnter) ...
widget->setAttribute(Qt::WA_UnderMouse, true);
else if (e->type() == QEvent::Leave || e->type() == QEvent::DragLeave)
widget->setAttribute(Qt::WA_UnderMouse, false);
QEvent::Enter
а также QEvent::Leave
события отправляются только тогда, когда приложение получает событие мыши от ОС.
Вы не перемещаете мышь, приложение не получает никакого события мыши и так WA_UnderMouse
атрибут не изменен.
Один из способов исправить это установить Qt::WA_UnderMouse
Присвойте правильное значение самостоятельно при перемещении виджета кнопки.