• 16490阅读
  • 8回复

[提问]Qt4中Qmenu如何在代码中让菜单变成灰色不可用 [复制链接]

上一主题 下一主题
离线逍遥心
 

只看楼主 倒序阅读 楼主  发表于: 2011-08-13
关键词: QMenuGUI
   我在自己代码中是这样写,比如:menu_4->setDisabled(true);  
   但是没有效果,菜单栏还是可用状态,如何让它变成不可用。

离线dbzhang800

只看该作者 1楼 发表于: 2011-08-13
void QAction::setDisabled ( bool b )
离线逍遥心

只看该作者 2楼 发表于: 2011-08-13
没有看懂,能详细说说吗?具体写个例子来看看,是不是说要有bool类型对象,不能直接false是吧。
离线dbzhang800

只看该作者 3楼 发表于: 2011-08-13
回 2楼(逍遥心) 的帖子
QMenu 是 QWidget 的派生类,操作菜单项时,你应该操作其对应的QAction,而不是使用QWidget的成员。

比如:

menu_4->menuAction()->setDisabled(true);
离线逍遥心

只看该作者 4楼 发表于: 2011-08-13
谢谢楼主,已经按例子的代码改写了,还是没有效果,我是这样子的,我登录后,通过槽函数相应比如menu_4->setEnabled(true),后来注销,后响应menu_4->menuAction()->setDisabled(true);我没有看出哪里有问题,另:menu_4->setEnabled(true),这个写法有问题不,但程序效果出来,能把原来灰色不可用变为可用。但在从可用变成不可用时:用代码:menu_4->menuAction()->setDisabled(true);就没有效果了。
离线roywillow

只看该作者 5楼 发表于: 2011-08-13
首先要确定你需要操作的是一个QAction,而不是一个QMenu
所以要从你那个menu中找到你需要操作的QAction,然后用setEnabled(false)
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线逍遥心

只看该作者 6楼 发表于: 2011-08-13
引用第5楼roywillow于2011-08-13 17:27发表的  :
首先要确定你需要操作的是一个QAction,而不是一个QMenu
所以要从你那个menu中找到你需要操作的QAction,然后用setEnabled(false)

是不是说直接用menu中的action的对象直接设置吗?比如menu_1有个action_1时,直接调用action_1->setEnabled(false),我试过不行啊,另外如何从menu找QAction?

这里补充一下,原来在没有登录之前,我是用QT Designer把未登录时,不可用的菜单项都设置为(把Enabled的前面的勾勾去掉了),我登录后在一个槽函数里,用action_1->setEnabled(true)和menu_1->setEnabled(true),为了换用户名有个注销功能,目的为了把菜单栏回复为未登录时的状态。但是发现使用上面的代码无效。



离线dbzhang800

只看该作者 7楼 发表于: 2011-08-13
引用第4楼逍遥心于2011-08-13 17:11发表的  :
谢谢楼主,已经按例子的代码改写了,还是没有效果,我是这样子的,我登录后,通过槽函数相应比如menu_4->setEnabled(true),后来注销,后响应menu_4->menuAction()->setDisabled(true);我没有看出哪里有问题,另:menu_4->setEnabled(true),这个写法有问题不,但程序效果出来,能把原来灰色不可用变为可用。但在从可用变成不可用时:用代码:menu_4->menuAction()->setDisabled(true);就没有效果了。


一个widget的可用不可用确实是通过QWidget::setEnabled()控制的,QMenu是QWidget的派生类,所以也不例外,

但因为它是QMenu,Qt会自动根据QAction的状态来自动设置其状态(调用QWidget::setEnabled),但你这样一来直接将其搞乱了。所以你必须始终对 QAction 进行操作
离线逍遥心

只看该作者 8楼 发表于: 2011-08-13
引用第7楼dbzhang800于2011-08-13 18:33发表的  :
一个widget的可用不可用确实是通过QWidget::setEnabled()控制的,QMenu是QWidget的派生类,所以也不例外,
但因为它是QMenu,Qt会自动根据QAction的状态来自动设置其状态(调用QWidget::setEnabled),但你这样一来直接将其搞乱了。所以你必须始终对 QAction 进行操作
.......

非常感谢楼主的帮助,谢谢!
快速回复
限100 字节
 
上一个 下一个