【Qt】Qt窗口程序

00. 目录

01. 概述

程序要实现的功能是:运行开始出现一个对话框,按下登录主界面按钮后该对话框消失并进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。进入主窗口后,按下显示对话框按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。

程序里先建立一个工程,设计主界面,然后再建立一个对话框类,将其加入工程中,并在程序中调用自己新建的对话框类来实现多窗口。

02. 开发环境

Windows系统:Windows10

Qt版本:Qt5.15或者Qt6

03. 程序设计

3.1 设计主窗口

打开Qt Creator,新建Qt Widgets Application,项目名称设置为2Widget,在类信息界面保持基类为QMainWindow、类名为MainWindow

3.2 完成项目创建后,双击mainwindow.ui文件进入设计模式,从左侧部件列表中向界面上拖入一个Push Button,然后双击并修改显示文本为“按钮”,
在这里插入图片描述

3.3 添加登录对话框

往项目中添加新文件,这里可以在编辑模式左侧的项目目录上右击,然后选择添加新文件菜单,如下图所示。当然也可以在文件菜单中进行添加。
在这里插入图片描述

3.4 模板选择Qt分类中的Qt设计师界面类,然后界面模板选择Dialog withoutButtons,如下图所示。
在这里插入图片描述

3.5 单击下一步进入类信息界面,这里将类名更改为LoginDialog(注意类名首字母一般大写)。如下图所示,下面的相关文件会自动改名。
在这里插入图片描述

3.6 当完成后会自动跳转到设计模式,可以对新添加的对话框进行设计。我们向界面上拖入一个Push Button,然后更改显示文本为“登录到主界面”。为了实现点击这个按钮后可以关闭该对话框并显示主窗口,我们需要设置信号和槽的关联。按下F4,便进入了信号和槽编辑模式。按着鼠标左键,从按钮上拖向界面,如下图所示。
在这里插入图片描述

当放开鼠标后,会弹出配置连接对话框,这里我们选择pushButton的clicked()信号和LoginDialog的accept()槽并按下确定按钮。如下图所示。
在这里插入图片描述

设置好信号和槽的关联后,界面如下图所示。
在这里插入图片描述

完成后,可以按下F3键来返回控件编辑模式。

3.7 按下Ctrl+2返回代码编辑模式,在这里打开main.cpp文件,添加代码:

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

    if (dlg.exec() == QDialog::Accepted)
    {
           w.show();
           return a.exec();
    }
    else
    {
        return 0;
    }
}

在这里,我们先创建了LoginDlg类的对象dlg,然后让dlg运行,即执行exec()函数,这样会显示对话框窗口,然后判断exec()的返回值,如果用户按下了登录按钮,那么返回值应该是Accepted,这时就显示主窗口,并正常执行程序;如果没有按下登录按钮,那么就结束程序。

3.8 讲述了一种显示对话框的情况,下面再来讲述一种情况。我们打开mainwindow.ui文件进入设计模式,然后在“按钮”部件上右击并选择转到槽菜单,如下图所示。
在这里插入图片描述

在弹出的转到槽对话框中选择第一个clicked()信号并按下确定按钮。这时会跳转到编辑模式mainwindow.cpp文件的on_pushButton_clicked()函数处,这个就是自动生成的槽,已经自动在mainwindow.h文件中进行了声明。我们只需要更改函数体即可。

void MainWindow::on_pushButton_clicked()
{
    QDialog *pDlg = new QDialog(this);

    pDlg->show();
}

我们使用了两类窗口打开的方式,一个是自身消失而后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。而且我们还使用了两种方式来使用信号和槽,一种是直接在设计模式编辑信号和槽,另一种是在设计模式通过部件的“转到槽”菜单来自定义槽函数。信号和槽是Qt非常核心的内容,可以说如果不会灵活使用信号和槽,那么使用Qt也就失去了意义,但是大家也不用急于掌握它。

04. 程序执行

在这里插入图片描述

05. 预留

06. 附录

源码下载:Qt窗口程序示例.rar

© 版权声明
THE END
喜欢就支持一下吧
点赞188 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容