我知道这被问到here,但它不起作用......
这是我的问题:我的程序实际上有两种形式:LoginWindow
和MainWindow
,程序在LoginWindow上启动,然后我调用了一个类Login
,其中包括所有方法和用于检查用户的属性
这是一些代码:
//in LoginWindow class
Login log;
log.checkID(ui->usrnmle->text().toStdString(), ui->passwdle->text().toStdString());
//in Login class
void Login::checkID(string usr, string passwd)
{
if(usr == "Test" && passwd == "root")
{
cout << "Ok!" << endl;
MainWindow mw = MainWindow();
mw.show();
LoginWindow lw = LoginWindow();
lw.hide();
}
else
{
cout << "Connection failed " << endl;
}
}
我输入了良好的用户名和密码,我得到了&#39; Ok!&#39;在输出控制台中,但MainWindow永远不会出现。
有人可以帮忙吗?
答案 0 :(得分:1)
您的MainWindow mw
是一个局部变量,一旦您离开checkID
函数(甚至在if
之外就会被销毁,但这并不重要)
您需要在堆上创建
MainWindow *mw = new MainWindow();
mw->show();
然后为了避免内存泄漏,你需要在没有进一步使用时将其销毁:
delete mw;
答案 1 :(得分:1)
我不是QT开发人员,但是
{
cout << "Ok!" << endl;
MainWindow mw = MainWindow();
mw.show();
LoginWindow lw = LoginWindow();
lw.hide();
}
您正在此处创建两个本地窗口,当范围结束时,这些窗口会在现场销毁。
你需要在这些实例的使用中保持这些实例。例如,让它们成为某些更大对象的成员变量,例如&#34; App&#34;等级os所以。