Qt-在Windows上按Alt键后防止菜单栏获取焦点

Way*_*yee 5 c++ windows qt

在我的应用程序中,我需要更改鼠标光标并在Alt按下键后做一些不同的事情,并在Alt释放键后返回到正常光标和正常行为。

在Mac OS上,一切正常,而Alt-pressing事件将焦点移至Windows上的菜单栏(Windows的本机行为),这导致了我的光标更改期望的意外行为。

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

Mee*_*fte 5

SH_MenuBar_AltKeyNavigation样式提示负责按下 Alt 后的菜单栏选择。您需要子类化QProxyStylestyleHint像这样覆盖方法:

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);
    }
};
Run Code Online (Sandbox Code Playgroud)

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

QApplication a(argc, argv);
a.setStyle(new MenuStyle());
Run Code Online (Sandbox Code Playgroud)