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

时间:2014-11-19 12:53:02

标签: qt qcombobox qtstylesheets

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

pComboBox->setStyleSheet(pComboBox->styleSheet()+QString("  QComboBox:hover{css style here}"))

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

pComboBox->setStyleSheet(pComboBox->styleSheet()+QString("  QComboBox::down-arrow{css style here}"))

但是,当鼠标悬停在QComboBoxdown-arrow时,我不知道如何设置QComboBox的子控制QSS的样式。有人有想法吗?

1 个答案:

答案 0 :(得分: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-arrow{background-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