Название: реакция QGroupBox на hover Отправлено: Вольдемар от Март 02, 2021, 17:13 прошу прощения я новичек на форуме и несразу увидел ветку QSS, перенес вопрос сюда.
Есть некий QGroupBox, нужно изменить, скажем, его border при наведении мышкой. пытаюсь прописать стили auto g=new QGroupBox(&mainWindow); g->setFixedSize(300,300); g->setObjectName("g"); g->setStyleSheet("QGroupBox#g{" "border: 2px solid green;" "}" "QGroupBox#g:hover{" "border: 2px solid yellow;" "}" ); и ничего не происходит. Перерыв кучу гайдов, ненашол ответа. Включил чекбокс в области тайтла групбокса g->setCheckable(true); теперь стили работают, но лишь при наведении на этот самый чекбокс. (кстати сигнал вида QObject::connect(g, &QGroupBox::clicked, [=]()mutable{ g->setFixedSize(100,100); }); работает так же лишь на чекбокс...) Как мне заставить всю область GroupBox реагировать на события мышки? Название: Re: реакция QGroupBox на hover Отправлено: kambala от Март 02, 2021, 19:32 можно например через фильтр событий: https://doc.qt.io/qt-5/eventsandfilters.html#event-filters
по-моему тебе стиль надо применять (в смысле вызывать метод setStyleSheet) не к g, а к его родителю — mainWindow Название: Re: реакция QGroupBox на hover Отправлено: Вольдемар от Март 02, 2021, 20:03 к паренту попробовал применять-ровно то же самое.
еще так пробовал void QGroupBox::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { setStyleSheet("QGroupBox{" "border: 2px solid yellow;" "}" ); } else { QGroupBox::mousePressEvent(event); } } то же ничего не дает... буду смотреть фильтры событий спс за подсказку, однако я блин непонимаю зачем так обидели QGroupBox ведь можно было QGroupBox:hover => ховер на весь виджет, и QGroupBox::indicator:hover или ::title:hover для этих деталей кому надо.. ??? ??? зы вот http://www.prog.org.ru/topic_23227_15.html практически аналогичное обсуждение в 2012году похоже не пришли к однозначному результату :-\ Название: Re: реакция QGroupBox на hover Отправлено: Вольдемар от Март 03, 2021, 12:33 С фильтром событий все решилось, спс kambala за наводку.
Странно что нельзя реализовать hover, pressed и тп стилями(или сигналами) для таких виджетов как QGroupBox, QFrame... Вот черновик, все в класс окна влепил тестово, может кому пригодится (обр. внимание-стили, которые вы не изменяете при обработке событий, все равно прописываем, иначе они скинутся к дефолтным) #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QEvent> #include <QGroupBox> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0){ g->setParent(this); g->setObjectName("g"); g->setFixedSize(200,200); g->setStyleSheet("QGroupBox#g{" "border: 2px solid gray;" "background: green;" "}"); g->installEventFilter(this); } ~MainWindow(); QGroupBox *g=new QGroupBox; protected: bool eventFilter(QObject *obj, QEvent *event) { if (obj == g) { QEvent::Type type = event->type(); if (type == QEvent::HoverLeave) { g->setStyleSheet("QGroupBox#g{" "border: 2px solid gray;" "background: green;" "}"); } else if (type == QEvent::HoverEnter) { g->setStyleSheet("QGroupBox#g{" "border: 2px solid yellow;" "background: green;" "}"); }else if (type == QEvent::MouseButtonPress) { g->setStyleSheet("QGroupBox#g{" "border: 2px solid yellow;" "background: red;" } } return QWidget::eventFilter(obj, event); } }; #endif // MAINWINDOW_H |