Qt登录窗口的退出逻辑

 

 

程序有一个主窗口,在主窗口显示前有一个登陆窗口,登陆成功后显示主窗口,登陆失败退出程序

 

int main(int argc, char *argv[])

{
    QApplication a(argc, argv); 
    //使用类QSplashScreen 
    //加载程序启动画面:
   QSplashScreen *splash = new QSplashScreen;
    splash->setPixmap(QPixmap(":/images/test.png"));
    splash->show();
 
    Qt::Alignment topRight = Qt::AlignCenter;//Qt::AlignRight|Qt::AlignTop;
    splash->showMessage(QObject::tr("正在启动程序..."), topRight,Qt::black);
 
    MainWindow w;
    w.connectDatabase();//连接数据库
    .......
    w.showMaximized();
    splash->finish(&w);//在主窗口加载完成后释放启动画面资源
    delete splash;
    if()//连接失败
    {
            w.close();
            a.quit();
            return 0;//如果没有连接上数据库,则不会进入主窗口,整个程序结束运行
    }
    w.initMembers();//初始化主界面
   return a.exec();//程序一直运行,直到主窗口关闭
}

 

 

别人的实现方法:

main.cpp

int main(int argc, char *argv[]) {
QApplication a(argc, argv);
   MainWindow w;

w.login();

return a.exec();

}

MainWindow.cpp中的login过程和关闭是这样的

void MainWindow::login() {
Login l;
if (l.exec() == QDialog::Accepted) {

    l.hide();
     this->show();
} else {
   this->close();

}
}
void MainWindow::closeEvent(QCloseEvent *event) {

event->accept();

}

感觉逻辑上很正确,就是登陆不成功,窗口都退出了,进程依然在内存中运行,使用用qApp->quit();也不能使进程结束。翻阅资料才明白,l.exec() 是模态对话框,在执行退出程序的close quit等函数时,a.exec()还没有执行,事件循环还没有建立,所有退出事件都不起作用。最后用了这样的机制才达到如期目的:

main函数不变化

login变成:

MainWindow::~MainWindow() {
delete l;
}
void MainWindow::login(){
l->show();
}
void MainWindow::loginFinshed(bool ok){//login发射loginFinshed信号
if(ok){
   l->hide();
     this->show();
}else{
   qApp->quit();
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值