从当前版本打开QWidget或QWindow

时间:2016-01-19 15:39:27

标签: c++ qt

我知道这被问到here,但它不起作用......

这是我的问题:我的程序实际上有两种形式:LoginWindowMainWindow,程序在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永远不会出现。

有人可以帮忙吗?

2 个答案:

答案 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所以。