找回密码
 立即注册
收起左侧

如何设置不同权限

10
回复
10999
查看
[复制链接]
累计签到:87 天
连续签到:1 天
来源: 2013-7-3 18:44:55 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 20030969 于 2013-7-3 18:47 编辑

想写个登陆界面,根据登陆不同的号 对应的按钮可用/不可用

但是遇到了失灵的问题。。

用了两种方法

一是登陆窗口 login发送个信号到主窗口

但是由于无法设置

login  *login =new login;
login-show();//这句话不能写,因为登录窗口关闭了,不能再显现出来。不写信号又貌似连不上……

connect(login,SINGNAL(),this,SLOT())

所以方法失灵……

还一种方法是将mainwindow作为login的子类

mainwindow w;
然后再mainwindow里定义一个public void setlimit();
然后哎login.cpp里面写
if(query.value(4)=="admin")
w.setlimit();

然后再mainwindow里面写

void mainwindow::setlimit()
{
  ui->button->setEnable(false);
}

也没用。求指导,谢谢!!

最佳答案

查看完整内容

明白楼主的意思了。 楼主是不是想。运行程序第一个显示的窗口应该是登录窗口,用户输入账号密码后,mainwindow根据不同的账号调用不同的构造函数。 楼主可以不去调用构造函数。如果不同账号间,主要窗口的按钮数量和位置不变,可以在构造函数中把所有的按钮都建立对象并进行布局。然后写一个初始化的函数,这个函数不进行按钮的创建和布局,只是根据用户名的不同设置按钮是否可操作,使用button->setEnabled(false);或者action的相 ...
回复

使用道具 举报

尚未签到

2013-7-3 18:44:56 显示全部楼层
明白楼主的意思了。
楼主是不是想。运行程序第一个显示的窗口应该是登录窗口,用户输入账号密码后,mainwindow根据不同的账号调用不同的构造函数。
楼主可以不去调用构造函数。如果不同账号间,主要窗口的按钮数量和位置不变,可以在构造函数中把所有的按钮都建立对象并进行布局。然后写一个初始化的函数,这个函数不进行按钮的创建和布局,只是根据用户名的不同设置按钮是否可操作,使用button->setEnabled(false);或者action的相关功能,设置按钮的可用不可用。mylogin->show()只在mainwindow的构造函数中调用一次,以后就不会显示了,可以通过添加信号和mylogin的show()槽函数连接,来切换用户。可以在mylogin->show()后面加一句mylogin->setModal(true);让登陆窗口显示的时候不显示mainwindow。
如果账号不同,窗口的按钮的数量或布局不同。可以在mainwindow 的构造函数中把mylogin给show出来,然后创建几个不同的widget。再收到用户登陆后的信号后,根据信号的不同使用mainwindow的setCentralWidget来把相应的widget放到mainwindow中。也可以使用widget->show()和setModal只显示widget。这么做在切换用户的时候很快但程序启动时稍微慢点。也可以那几个不同的widget写成类,然后mainwindow接受数据后再创建对应的账户所对应的widget。这么做得做好切换用户的时候对原来用户widget的删除工作,不然容易内存泄露
回复

使用道具 举报

累计签到:34 天
连续签到:1 天
2013-7-3 20:35:01 显示全部楼层
没怎么搞明白你的意思....
【根据登陆不同的号 对应的按钮可用/不可用】
我的想法是,在数据库中标注不同按钮的权限或者类似的权限声明,然后验证的时候通过hide去隐藏。
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-3 21:37:35 显示全部楼层
期飞 发表于 2013-7-3 20:35
没怎么搞明白你的意思....
【根据登陆不同的号 对应的按钮可用/不可用】
我的想法是,在数据库中标注不同按 ...

那换个方式 。。

登陆界面如何发送信号给主界面……
回复

使用道具 举报

尚未签到

2013-7-4 08:18:52 显示全部楼层
楼主的意思是不是,用户正常登陆程序能正常运行,但用户直接关闭登陆窗口不进行操作,就得不到自己想要的效果了。
可以在login类中重定义关闭时间。可以在login的closeEvent中写上qApp->quit();关闭登陆框就关闭主程序。也可以在closeEvent中加入发送一个信号然后再关闭。mainwindow中接受这个信号进行相应的操作
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-4 08:25:18 显示全部楼层
竞风 发表于 2013-7-4 08:18
楼主的意思是不是,用户正常登陆程序能正常运行,但用户直接关闭登陆窗口不进行操作,就得不到自己想要的效 ...

能不能详细给说下如何发送信号才关闭?现在都是关闭了发不出去……
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-4 09:25:19 显示全部楼层
加了qapp->quit()也不行,还有个进程
回复

使用道具 举报

尚未签到

2013-7-4 09:27:08 显示全部楼层
在login类里面定义一个信号
signals:
    void loginclosed();
定义一个closeEvent
protected:
    void closeEvent(QCloseEvent *);
然后在login的cpp文件中定义closeEvent
void login::closeEvent(QCloseEvent *event)
{
    emit loginclosed();
    //this->close();//这句可以不用,具体怎么回事我也没弄明白。希望别人指点指点
}
在mainwindow类中加入信号和槽的连接并定义槽函数进行操作就可以了
mylogin =  new login;
mylogin->show();
connect(mylogin,SIGNAL(loginclosed()),this,SLOT(close()));
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-4 10:17:07 显示全部楼层
竞风 发表于 2013-7-4 09:27
在login类里面定义一个信号
signals:
    void loginclosed();

还是有问题

mylogin->show();这句用了登陆框又显出来了……

connect(mylogin,SIGNAL(loginclosed()),this,SLOT(close()));
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-7-4 11:50:11 显示全部楼层
竞风 发表于 2013-7-4 11:17
明白楼主的意思了。
楼主是不是想。运行程序第一个显示的窗口应该是登录窗口,用户输入账号密码后,mainwin ...

是的 ,而且现在目的就是根据不同账号设置几个按钮的可用性。

但是出现问题是 无法在登陆的时候把登陆界面的账号发送到主界面进行判断。

使用了发送信号的方法 但是主界面需要用login-》show();函数才能连接上,这个时候就会出现登陆窗。。

使用了定义公共变量的方法 结果没法在主界面引用http://www.qter.org/forum.php?mo ... &page=1#pid1809 这是另个帖子。

使用了将主界面在登陆窗实体化,然后直接执行主窗口函数的方法,但是要么退出按钮点了进程还在。。要么登陆进去之后两个界面都在……

郁闷死了。。求搭救!

回复

使用道具 举报

尚未签到

2013-7-4 13:56:56 显示全部楼层
楼主加我下QQ吧,给你传个例子490681817
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了