Qt - 防止在Windows上按下Alt键后菜单栏抢占焦点

5

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

在Mac OS上一切正常,而在Windows上,Alt键按下事件会将焦点移动到菜单栏(本地Windows行为),这导致我的光标更改意图出现了意外行为。

因此问题是:如何禁用这个Windows功能(当然要使用Qt进行编码),并始终将Alt键按下事件传递给应用程序本身而不是菜单栏。


顺便说一下,我在这个问题上报告了一个错误,即在按下Alt键后释放焦点会停留在菜单中。 - Hi-Angel
1个回答

8

SH_MenuBar_AltKeyNavigation 是一个与按下Alt键后菜单栏选择有关的样式提示。您需要继承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());

非常感谢!它帮助解决了问题。已经注意到了。 - Wayee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接