我想在鼠标悬停时更改QScrollBar样式。我试图通过添加eventFilter使其工作,但是它不起作用。

代码:

qApp->installEventFilter(this);

bool Test::eventFilter(QObject *object, QEvent *event)
{
    if (event->type() == QEvent::Scroll) {
        QScrollEvent *scrollEvent = static_cast<QScrollEvent*>(event);
        if (scrollEvent->scrollState() == QScrollEvent::Enter) {
            qDebug() << "Enter";
            this->setStyleSheet("QScrollBar:vertical {width: 20px;}");
        }

        if (scrollEvent->scrollState() == QScrollEvent::Leave) {
            qDebug() << "Leave";
            this->setStyleSheet("QScrollBar:vertical {width: 12px;}");
        }
    }

    return QObject::eventFilter(object, event);
}

我怎样才能做到这一点?

最佳答案

在事件过滤器中要处理的正确事件实际上是QEvent::Enter和QEvent::Leave。 QScrollEvent在实际发生滚动时使用,因此未触发滚动。

您也可以直接将样式表与:hover属性一起使用。

关于c++ - 鼠标悬停时的QScrollBar,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42233699/

10-11 16:29