Qt 多窗体

前言

        在 Qt编程中经常会遇到要在多个界面之间切换的情况,如从登录界面跳转到主界面,从主界面跳转到设置界面,再返回到主界面。我们将会用一个简单的示例来实现多窗体功能。


登录窗口

        创建基类为QMainWindow,类名为LoginWin。再使用ui界面设计。

        将密码框不显示出来。

        再右键单击按钮进行跳转槽函数编辑:

void loginwin::on_login_button_clicked()
{
    QString user = "root";
    QString password = "123456";
    if((ui->userline->text() == user)&&(ui->passwordline->text() == password)){
        QMessageBox::about(this,"成功","登录成功");
    }else{
        QMessageBox::critical(this,"失败","输入有误",QMessageBox::Ok,QMessageBox::NoButton);
    }
}

        在以后的介绍中,校准用户名和密码的过程会再数据库里面校对。 现在我们拥有了登录界面,还差系统界面。


系统界面

        我们在原来项目里面添加:

         在选择模板类的时候选择MainWindow。并且在ui设计界面

        登录界面 loginwin.cpp 修改部分代码,在登录按钮对应的槽函数中创建主界面对象并显示主界面即可。主界面显示出来后登录界面就可以销毁了。创建的时候注意主界面要单独创建,不能与登录界面有关联。主要代码如下(注意添加头文件 )。

void loginwin::on_login_button_clicked()
{
    QString user = "root";
    QString password = "123456";
    if((ui->userline->text() == user)&&(ui->passwordline->text() == password)){
        //如果正确则跳转至主界面
        MainWindow *win=new MainWindow;
        win->show();
        this->close();
        //这里不能使用delete,因为this是主函数中创建的栈空间,系统会自动释放
    }else
        QMessageBox::critical(this,"失败","输入有误",QMessageBox::Ok,QMessageBox::NoButton);
}

        跳转到主界面,单击主界面“退出”按钮的时候返回到登录界面)这种操作不是经常性操作,所以开始登录的时候已经关闭窗口了,那么现在要让登录界面显示就要重新创建一个界面)。在mainwindow.ui中单击“退出登录”按钮,单击鼠标右键,在弹出的快捷菜单中选择“转到槽”,设置 clicked()信号的槽函数,代码如下(注意添加头文件,包含其他窗体)。

void MainWindow::on_quit_button_clicked()
{
    loginwin *win=new loginwin;
    win->show();
    delete this;
    //此时就可以用delete
}

        由主界面跳转到设置界面:在 mainwindow.ui中选择“设置”按钮,单击鼠标右键,在弹出的快捷菜单中选择“转到槽”,设置 clicked()信号的槽函数,代码如下。(此时又添加也setwin类界面)

void MainWindow::on_edit_button_clicked()
{
    // 创建设置界面,并且把 this 传入设置界面用于后面的返回
    // 注意 MainWindow、SetWin 窗口的界面在设计的时候选择 MainWindow 界面模板设计实现
    setWin *win = new setWin(this);
    win->show();
    this->hide();// 主界面隐藏(后期直接可以显示)
}

        再从设置界面返回主界面:在 setwin.ui中单击“返回主窗口”按钮,单击鼠标右键,在弹出的快捷菜单中选择“转到槽”,设置 clicked() 信号的槽函数,代码如下。

void setWin::on_back_button_clicked()
{
    this->parentWidget()->show();
    delete this;// 释放设置界面
}

        结果:

 


        这个简单的例子就把多窗体功能演示了一遍,其实后面的父窗口hide(),也可以在前面的代码中使用!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值