1.最近在做项一个软件菜单要根据角色的不同部分禁用变灰 如何实现呢
2.探究 QMenuBar 、QAction、 发现网上的很多资料都只是添加,但是动态修并没有
3.具体怎么做呢
1.启动后查询设备id并根据设置id到数据库查询获得身份和角色 初始化到mainwindow的变量中
如:currentRole 最好用public
2.用定时器 刷新currentRole 当发现身份变化执行 菜单菜单子项的 禁用和可用setEnable()
4.问题来了
1.如何遍历找到QAction 呢,我们只要将受权限控制的子项定义为公共变量
如在在mainwindow..h 中
public:
QAction *pAction02_testkz_02=NULL;//测试受控菜单子项
QAction *pAction03_testkz_03=NULL;//测试受控菜单子项
5.定时器方法:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//.................
//以下为角色刷新的定时器方法
QTimer * timer6_RoleRelation= new QTimer(this);
connect(timer6_RoleRelation,SIGNAL(timeout()),this,SLOT(Time_Update_Role_Relation()));
timer6_RoleRelation->start(8000);
}
6.角色刷新方法 示意
//定时更新角色相关菜单和术语
void MainWindow::Time_Update_Role_Relation()
{
if(currentRole!=NULL)
{
QString role_role_01="role1";//XXX角色
QString role_role_02="role2";//XXX角色2
if(currentRole.compare(role_role_01)==0)
{
// 菜单角色逻辑清单-----------------------------------begin--------------------
// 菜单角色逻辑清单-----------------------------------end---------------------
pAction02_textsk_01->setEnabled(false);
pAction02_textsk_02->setEnabled(false);
}
else if(currentRole.compare(role_role_02)==0)
{
pAction02_textsk_01->setEnabled(true);
pAction02_textsk_02->setEnabled(true);
}
else
{
//nothing
pAction02_textsk_01->setEnabled(false);
pAction02_textsk_02->setEnabled(false);
}
qApp->processEvents();//强制刷新 让上面的设置生效
7.如果不加 强制刷新 就总是不生效
所以aApp->proceeEvents(); //必须加上,
过程中借鉴了 其它兄弟的资料