• 7526阅读
  • 12回复

[提问]登陆界面的退出 进程没关掉 [复制链接]

上一主题 下一主题
离线200300969
 

只看楼主 倒序阅读 楼主  发表于: 2013-07-05
写了个登陆界面 由于主界面需要用到登陆用户名 设置了一个公共变量 QString limitID;


然后主界面写了如下代码设置一个按钮的可用性,当这段去掉的时候登陆和退出登陆都正常 ,加上了就退出进程在,登陆要登2次……


求指点啊!!!要疯了!!!


mainwindow.cpp
loginDialog loginMain(this);    
loginMain.exec();    
while(loginMain.limitID != "user" && loginMain.limitID!="admin")        
loginMain.exec();    
if(loginMain.limitID=="user")        
ui->actionUsercheck->setEnabled(false);


main.cpp


MainWindow w;
loginDialog dlg;      
if(dlg.exec()==QDialog::Accepted)        {          
w.show();          
a.setQuitOnLastWindowClosed(false);
  return a.exec();        
}    
  else return 0;


loginDialog.cpp
QSqlQuery query;//数据库  
      query.exec(QObject::tr("select num,id,pwd, usradmin , name from userdata"));    
    int flag=0;//循环      
  while(query.next())        {      
  if ( ui->userLineEdit->text()==query.value(1).toString() && ui->pwdLineEdit->text()==query.value(2).toString())      
{            
QDialog::accept();            
int fieldNo = query.record().indexOf("usradmin");          
limitID =query.value(fieldNo).toString();          
flag=1;          
}        
if(flag==1)
break;    
}
离线dbzhang800

只看该作者 1楼 发表于: 2013-07-05
引用楼主200300969于2013-07-05 00:53发表的 登陆界面的退出 进程没关掉 :
加上了就退出进程在
.......


setQuitOnLastWindowClosed(false) 是你自己加的吧?

引用楼主200300969于2013-07-05 00:53发表的 登陆界面的退出 进程没关掉 :

登陆要登2次……

.......

loginDialog 你自己创建了两个嘛
离线200300969

只看该作者 2楼 发表于: 2013-07-06
回 1楼(dbzhang800) 的帖子
loginDialog 在mainwindow.cpp里面不创建一个的话 没法接收到loginDialog 中的变量啊。有没有其他解决办法?
离线ppdayz

只看该作者 3楼 发表于: 2013-07-08
回 2楼(200300969) 的帖子
main.cpp

w.show();          
return a.exec();
不要创建loginDialog

在mainwindow.cpp的构造函数里面创建就可以了

loginDialog loginMain(this);    
if(loginMain.exec() == QDialog::Accepted){

}else{
exit(0);
}

ui->setupUI(this);

“ui->setupUI(this);”这句放的位置看你的需求而定。
1条评分好评度+1
clannadzy 好评度 +1 谢谢,好回答,茅塞顿开 2014-06-16
离线200300969

只看该作者 4楼 发表于: 2013-07-08
回 3楼(ppdayz) 的帖子
“ui->setupUI(this);”这句 有啥作用?请详细说下我新手@@ 谢谢!
离线200300969

只看该作者 5楼 发表于: 2013-07-08
回 3楼(ppdayz) 的帖子
你好 这样写果然成了 ,但是在login出来的时候 window的任务栏是看不到图标的,一定要登陆进主界面了任务栏才能看到图标 请问怎么破??谢谢!
离线ppdayz

只看该作者 6楼 发表于: 2013-07-09
在logindia 创建之间把托盘建立好就行了
离线alexltr

只看该作者 7楼 发表于: 2013-07-09
如果我没有理解错误,楼主的这个问题可以这样解决:
将loginDialog和MainWindow都放在main()函数里,
loginDialog界面accept后,在构建MainWindow时以参数的形式将你要的数据传递到主界面里使用。
而不是将loginDialog放在MainWindow.cpp里。

MainWindow w(userName, userAccess,.....);
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 8楼 发表于: 2013-07-09
可以在作品展中找总版主的bpms作参考
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线XChinux

只看该作者 9楼 发表于: 2013-07-09
Bpms框架我一直在发展,当然其早已失去了其原本意义,而只成为一个框架,合适的时候我会将其加入到tianchi中或者新建的开源项目中。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线200300969

只看该作者 10楼 发表于: 2013-07-10
回 6楼(ppdayz) 的帖子
怎么建呢……麻烦详细说说好不……新手
离线XChinux

只看该作者 11楼 发表于: 2013-07-12
示例:

int main(int argc, char **argv)
{
       QApplication app(argc, argv);
       ......
       LoginDialog *dlg = new LoginDialog();
       if (dlg->exec() != QDialog::Accepted)
       {
                delete dlg;
                 app.quit();
                 return 0;
       }
       // .... 这里获取用户登录信息
       auto param = dlg->getUserInfo();
       delete dlg;
      
      MainWindow window;
      window.setUserInfo(param);
      window.show();
      return app.exec();
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线clannadzy

只看该作者 12楼 发表于: 2014-06-16
谢谢,好回答,茅塞顿开
快速回复
限100 字节
 
上一个 下一个