我有一个QWidgetAction
,其中包含三个QPushButtons
和一个QMenu
,其中包含许多操作,包括带有子菜单的操作。此菜单如下图所示,其中蓝线为分隔符。
所以,当我试图用菜单项中有鼠标的三个按钮中的一个按下子菜单时,我没有从css设置的悬停效果。但是,当我试图从没有任何子菜单的菜单项悬停时,一切正常,我有背景色。
所以,问题是:为什么这种方式有效以及如何解决?
我已经尝试过使用代码了,是的,控制的行为发生了变化,但不是我需要的方式(我的按钮颜色但颜色和形状错误):
bool CutCopyPasteWidget::eventFilter(QObject* object, QEvent* event)
{
if (object == m_cutButton || object == m_copyButton || object == m_pasteButton)
{
QEvent::Type t = event->type();
if (t == QEvent::Enter)
{
QPushButton* w = qobject_cast<QPushButton*>(object);
w->setAttribute(Qt::WA_Hover);
w->setAutoFillBackground(true);
w->update();
emit entered();
}
else if (t == QEvent::Leave)
{
QPushButton* w = qobject_cast<QPushButton*>(object);
w->setAttribute(Qt::WA_Hover, false);
w->setAutoFillBackground(false);
w->update();
}
}
return QWidget::eventFilter(object, event);
}
风格:
CutCopyPasteWidget QPushButton:hover:enabled
{
background: HOVERED_CONTEXT_BUTTON_GRADIENT;
border-color: HOVERED_ACTIVE_CONTEXT_BUTTON_BORDER;
}
CutCopyPasteWidget QPushButton:!hover:enabled
{
background: none;
border-color: ACTIVE_CONTEXT_BUTTON_BORDER;
}
CutCopyPasteWidget QPushButton:!hover:!enabled
{
background: none;
border-color: INACTIVE_CONTEXT_BUTTON_BORDER;
}
CutCopyPasteWidget QPushButton
{
min-width: 2pt;
}
更新:我创建了一个github repo,并举例说明了这个问题。
答案 0 :(得分:0)
好吧,我没有找到任何解释或建议,所以我自己找到了解决方案。
要突出显示QWidgetAction
中的按钮,我添加了动态属性,就像在下面的代码中构建按钮的地方一样:
m_pasteButton->setProperty("mouseHover", false);
然后,在按钮上安装过滤器并捕获Enter
和Leave
事件,以确定鼠标悬停的时间:
bool CustomWidgetAction::eventFilter(QObject* object, QEvent* event)
{
if (object == m_cutButton)
{
QEvent::Type t = event->type();
if (t == QEvent::Enter)
{
QWidget* w = qobject_cast<QWidget*>(object);
w->setProperty("mouseHover", true);
w->polish(w);
}
else if (t == QEvent::Leave)
{
QWidget* w = qobject_cast<QWidget*>(object);
w->setProperty("mouseHover", false);
w->polish(w);
}
}
return QWidget::eventFilter(object, event);
}
然后,在CSS中,我添加了一些规则来设置悬停效果:
CustomWidgetAction QPushButton[mouseHover="true"]:enabled
{
background: HOVERED_CONTEXT_BUTTON_GRADIENT;
border-color: HOVERED_ACTIVE_CONTEXT_BUTTON_BORDER;
}
CustomWidgetAction QPushButton[mouseHover="false"]:enabled
{
background: none;
border-color: ACTIVE_CONTEXT_BUTTON_BORDER;
}