C++ 从当前窗口打开QWidget或QWindow

C++ 从当前窗口打开QWidget或QWindow,c++,qt,C++,Qt,我知道有人问过这个,但没用 这是我的问题:我的程序实际上有两种形式:LoginWindow和main window,程序从LoginWindow开始,然后我调用了一个类Login,其中有检查用户的所有方法和属性 下面是一些代码: //in LoginWindow class Login log; log.checkID(ui->usrnmle->text().toStdString(), ui->passwdle->text().toStdString());

我知道有人问过这个,但没用

这是我的问题:我的程序实际上有两种形式:
LoginWindow
main window
,程序从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;
    }
}
//在LoginWindow类中
登录日志;
log.checkID(ui->usrnmle->text().toStdString(),ui->passwdle->text().toStdString());
//在登录类中
void Login::checkID(字符串usr,字符串passwd)
{
if(usr==“Test”&&passwd==“root”)
{

cout您的
main窗口mw
是一个局部变量,一旦退出
checkID
函数(或者甚至退出
if
,但这并不重要)

您需要在堆上创建它

MainWindow *mw =  new MainWindow();
mw->show();
然后,为了避免内存泄漏,您需要在不再使用时销毁它:

delete mw;

您的
main窗口mw
是一个局部变量,一旦退出
checkID
函数(或者甚至退出
if
,但这并不重要)

您需要在堆上创建它

MainWindow *mw =  new MainWindow();
mw->show();
然后,为了避免内存泄漏,您需要在不再使用时销毁它:

delete mw;

我不是QT开发人员,但

{
        cout << "Ok!" << endl;

    MainWindow mw = MainWindow();
    mw.show();

    LoginWindow lw = LoginWindow();
    lw.hide();
}
{

cout我不是QT开发人员,但是

{
        cout << "Ok!" << endl;

    MainWindow mw = MainWindow();
    mw.show();

    LoginWindow lw = LoginWindow();
    lw.hide();
}
{

对不起,我不是一个母语者,你是通过“你需要在堆上创建它”来做什么的?@ NeWokmne,它是一个关于变量生命周期的C++基础。;
它们是在堆栈上创建的,并一直存在到其作用域结束。使用new operator创建的变量
MainWindow*mw=new MainWindow()
将一直存在,直到它被销毁并在堆上创建。谢谢。我习惯于使用C#和.NET Framework编程,这是我的第一个QT程序。正如你所说,我做到了,现在我可以显示主窗口,但登录窗口不会隐藏或关闭。无论如何thanks@Newokmyne这是相同的问题-只需将其创建为
LoginWindow*lw=newloginwindow();
。但是不要忘记以后删除它们,当你不再需要这些对话框时(例如在main类的析构函数中)。不,一旦我登录,登录窗口必须关闭,并且主窗口将一直工作到用户关闭它。关于关闭登录窗口,我找到了另一种方法:
checkID(字符串UR,String PasWd,Login Value*LW)<代码> > {LW-> CULL();} /Cord>……它工作,我认为这种方式可以。抱歉,我不是一个母语者,你是通过“你需要在堆上创建它”来做什么?@ NeWokmne,它是一个关于变量生存期的C++基础。当你创建它们时,代码<主窗口MW =主窗口();
它们是在堆栈上创建的,并一直存在到其作用域结束。使用new operator创建的变量
MainWindow*mw=new MainWindow()
将一直存在,直到它被销毁并在堆上创建。谢谢。我习惯于使用C#和.NET Framework编程,这是我的第一个QT程序。正如你所说,我做到了,现在我可以显示主窗口,但登录窗口不会隐藏或关闭。无论如何thanks@Newokmyne这是相同的问题-只需将其创建为
LoginWindow*lw=newloginwindow();
。但是不要忘记以后删除它们,当你不再需要这些对话框时(例如在main类的析构函数中)。不,一旦我登录,登录窗口必须关闭,并且主窗口将一直工作到用户关闭它。关于关闭登录窗口,我找到了另一种方法:
checkID(stringusr,stringpasswd,LoginWindow*lw)
然后
{lw->close();}
…它工作了,我想这样行吗?