激活子窗口后如何停止主窗口菜单变灰?

时间:2016-07-06 09:31:46

标签: c++ windows qt user-interface menu

Windows中有一项功能:如果当前窗口未激活,则此窗口的主菜单看起来已禁用(但实际上它只是灰显,因此您可以单击此菜单中的任何项目)。切换到另一个程序时没关系,但是当你转到子窗口时看起来不对。

即使使用标准记事本,也很容易重现这种效果:

  • 在其中加入任何文字,
  • Ctrl + F
  • 现在您可以看到主菜单看起来已禁用,但您可以点击其中的任何项目。

Main menu looks disabled

问题如下:如何仅为我的程序阻止此效果?在我的程序(C ++和Qt)中,当用户访问时,我在主菜单中的所有项目中都有相同的灰度儿童窗户。有没有办法阻止它?

我这里没有放任何代码,因为这种效果在大多数程序中都可以重现。但我希望可以更改QMenuQMenuBar的标记/属性来更正此行为。有可能吗?

1 个答案:

答案 0 :(得分:0)

我们可以更正QMenuBar的调色板,以替换处于非活动状态的文本颜色,文本颜色处于活动状态。

代码:

QPalette pal = pMenuBar->palette();
QColor col = pal.color(QPalette::Active, QPalette::ButtonText);
pal.setColor(QPalette::Inactive, QPalette::ButtonText, col);
pMenuBar->setPalette(pal);

用户不会看到主菜单中的项目变灰,因为活动和非活动项目的文本颜色将相同。

(从理论上讲,同一项目的活动状态和非活动状态的背景颜色可能不同。因此,对于背景也可以重新替换背景颜色)