【问题标题】:Changing the QWidgetAction style in Qt/C++在 Qt/C++ 中更改 QWidgetAction 样式
【发布时间】:2014-09-11 09:47:18
【问题描述】:

我在使用 QWidgetAction 类自定义菜单项时遇到问题。我创建自己的 QWidget 并将其设置为 QWidgetAction 的默认小部件。然后我将 QWidgetAction 添加到菜单中:

QMenu menu = new QMenu(this);
QCustomWidget* widget = new QCustomWdiget(this);  // inherits from QWidget
QCustomAction* action = new QCustomAction(this);  // Inherits from QWidgetAction
action->setDefaultWidget(widget);
menu->addAction(action);

自定义操作已添加到菜单中,但无法使用常规功能,例如使用箭头导航、将元素聚焦在悬停上等。我只是得到一个不继承普通菜单项行为的小部件。我试图设置我的自定义小部件的样式表。但是设置与正常操作相同的颜色、背景渐变、边框、字体类型、字体大小等工作量太大且不准确。有没有办法继承标准操作项的样式和/或行为?

【问题讨论】:

    标签: c++ qt stylesheet


    【解决方案1】:

    这是使 hover 工作的解决方案:

    void QCustomWidget::enterEvent(QEvent* e)
    {
      emit entered();
    }
    
    void QCustomAction::onWidgetEntered()
    {
        if (QMenu* menu = qobject_cast<QMenu*>(sender()->parent()))
        {
            menu->setActiveAction(this);
        }
    }
    
    // when you created both:
    
    connect(customWidget, SIGNAL(entered()), customAction, SLOT(onWidgetEntered()));
    

    【讨论】:

      【解决方案2】:

      @Ezee 我试过你的方法,但没有生效。 我使用 enterEvent 和 leaveEvent 来实现悬停效果; 当鼠标移到action上时,代码会运行到enterEvent,但是样式表没有生效。

      但是我找到了另一种实现我的功能的方法。我想做的只是在鼠标悬停动作时更改图标,我可以使用 QIcon::addIcon(QIcon::hover,XXXXX)。这样,我可以轻松更改悬停图标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        • 2014-01-01
        • 2021-11-19
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        • 2019-05-28
        相关资源
        最近更新 更多