当鼠标通过 QSS 悬停在 QComboBox 上时,样式 QComboBox 的子控件向下箭头

Posted

技术标签:

【中文标题】当鼠标通过 QSS 悬停在 QComboBox 上时,样式 QComboBox 的子控件向下箭头【英文标题】:Style QComboBox's sub-control down-arrow when mouse is hovering over the QComboBox via QSS 【发布时间】:2015-01-17 00:00:01 【问题描述】:

我知道如何在鼠标悬停时设置QComboBox 的样式:

pComboBox->setStyleSheet(pComboBox->styleSheet()+QString("  QComboBox:hovercss style here"))

我还知道通过以下方式设置QComboBox 的子控件向下箭头的样式:

pComboBox->setStyleSheet(pComboBox->styleSheet()+QString("  QComboBox::down-arrowcss style here"))

但是当鼠标通过QSS 悬停在QComboBox 上时,我不知道如何设置QComboBox 的子控件down-arrow。有人有想法吗?

【问题讨论】:

【参考方案1】:

我不知道QSS 是否足够强大(我认为没有),但使用eventfilter 你可以很容易地做到这一点:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)


    if (obj == ui->comboBox && event->type() == QEvent::Enter)
    
        //user enters combobox, so we apply stylesheet
        ui->comboBox->setStyleSheet("QComboBox::down-arrowbackground-color: red");
    
    else
        if(event->type() == QEvent::Leave)//user leaves combobox, so we set default settings
            ui->comboBox->setStyleSheet("");

    return QObject::eventFilter(obj, event);

要使用eventFilter,您还应该:

protected:
    bool eventFilter(QObject *obj, QEvent *event);//in header

qApp->installEventFilter(this);//in constructor

【讨论】:

感谢您的解决方案。

以上是关于当鼠标通过 QSS 悬停在 QComboBox 上时,样式 QComboBox 的子控件向下箭头的主要内容,如果未能解决你的问题,请参考以下文章

自定义QSS

QComboBox 点击触发主 QDialog 上的 leaveEvent

QSS 不同风格的按钮

QSS 不同风格的按钮

仅当鼠标悬停在元素上至少特定时间时,如何触发 MouseMove 事件?

如何将鼠标悬停在子元素上而不悬停在 CSS 中的父元素上?