Qt - 防止菜鸟在Windows上按下Alt后抓住焦点

时间:2016-05-04 07:21:01

标签: c++ windows qt

在我的应用程序中,我需要更改鼠标光标,并在按下Alt键后执行不同的操作,并在Alt键释放后返回正常光标和正常行为。

在Mac OS上一切正常,而Alt - 按下事件会将焦点移到Windows上的菜单栏(本机Windows行为),这会导致我改变光标的意外行为。

所以问题是:如何禁用这个Windows功能(当然是Qt中的代码)并始终将Alt键按下事件传递给应用程序本身而不是菜单栏。

1 个答案:

答案 0 :(得分:3)

在Alt按下后,

SH_MenuBar_AltKeyNavigation样式提示负责菜单栏选择。您需要继承QProxyStyle并覆盖styleHint方法,如下所示:

class MenuStyle : public QProxyStyle
{
public:
    int styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const
    {
        if (stylehint == QStyle::SH_MenuBar_AltKeyNavigation)
            return 0;

        return QProxyStyle::styleHint(stylehint, opt, widget, returnData);
    }
};

然后,将自定义样式设置为应用程序。

QApplication a(argc, argv);
a.setStyle(new MenuStyle());