QT系列教程(5) 模态对话框消息传递

模态对话框接受和拒绝消息

我们创建一个模态对话框,调用exec函数后可以根据其返回值进行不同的处理,exec的返回值有两种,Qt的官方文档记录的为

cpp 复制代码
QDialog::Accepted
QDialog::Rejected

Accepted 表示接受消息, Rejected表示拒绝消息。

还是按照之前的操作,选择新建QT Application项目,然后创建类名为MainWindow, 基类选择QDialog, 点击创建生成Qt项目。然后我们添加设计师界面类,类名MyDialog, 基类选择QDialog。然后在这个mydialog.ui中添加两个按钮,一个是进入主界面,一个是退出程序。

在设计师界面点击Edit Signal/Slots 信号槽的按钮,进入信号槽编辑界面, 鼠标按住退出程序按钮不松开拖动,将另一端连接到MyDialog对话框,QPushbutton这边信号选择clicked(), MyDialog信号选择reject,这样就将两个信号连接起来了,我们点击退出程序按钮,会触发MyDialog发送reject信号,因为MyDialog调用exec后等待信号返回,此时收到reject信号,exec就会返回Rjected值。

同样道理,MyDialog发送accetp()信号后, exec返回值为Accepted。

我们点击Edit Widget 按钮, 然后右键点击键入主界面按钮,点击进入槽,在Qt 为我们生成的槽函数里添加accetp()信号发送逻辑

cpp 复制代码
void MyDialog::on_pushButton_clicked()
{
    accept();
}

我们在main函数里调用对话框,然后根据返回值为Accepted,调用主窗口显示,否则直接退出

cpp 复制代码
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    MyDialog dialog;
    if(dialog.exec() == QDialog::Accepted){
        w.show();
         return a.exec();
    }else{
        return 0;
    }
}

运行后,我们点击进入主界面按钮,界面跳转至主界面,点击退出按钮程序退出。

主界面和登录界面切换

现在我们要实现主界面和登录界面的互相切换,我们刚才创建的对话框界面MyDialog界面是登录界面,主界面是MainWindow类。

我们在mainwindow.ui添加两个按钮,返回登录按钮和退出程序按钮, 再添加一个label表示这是主界面.

然后点击Edit Signal/Slot 进入信号编辑界面,点击退出程序按钮不松开拖动到尾部连接MainWindow的主界面上,选择退出程序的clicked()信号,MainWindow选择reject信号,将两个信号连接起来。

然后右击登录按钮转到槽,在槽函数里添加这个逻辑

cpp 复制代码
void MainWindow::on_pushButton_clicked()
{
    close();
    MyDialog mydialog;
    if(mydialog.exec() == QDialog::Accepted ){
        this->show();
    }else{
        return;
    }
}

点击返回登陆按钮就会close主窗口,但是并不是真的关闭,只是将主窗口隐藏,Qt回收机制是所有窗口都关闭后才回收。

再次运行程序,点击进入主界面按钮就可以进入主界面,点击返回登录按钮就可以返回登录界面,可以实现两个界面的切换了。

总结

视频链接https://www.bilibili.com/video/BV1nY4y1K7cD/?spm_id_from=333.999.0.0&vd_source=8be9e83424c2ed2c9b2a3ed1d01385e9

源码链接https://gitee.com/secondtonone1/qt-learning-notes

相关推荐
阿拉金alakin4 分钟前
深入理解 Java 线程池:核心参数、工作流程与常用创建方式
java·开发语言·java-ee
slandarer17 分钟前
MATLAB | R2026a 更新了哪些有趣的新东西?
开发语言·数据库·matlab
早起傻一天~G24 分钟前
vue2+element-UI上传图片封装
开发语言·javascript·ui
耿雨飞30 分钟前
Python 后端开发技术博客专栏 | 第 03 篇 面向对象编程进阶 -- 从 SOLID 原则到 Python 特色 OOP
开发语言·python·面向对象·oop
charlie11451419131 分钟前
嵌入式现代C++工程实践——第14篇:第二次重构 —— 模板登场,编译时绑定端口和引脚
开发语言·c++·stm32·安全·重构
源码站~34 分钟前
基于python的校园代跑(跑腿)系统
开发语言·python
BugShare34 分钟前
一个用 Rust 编写的、速度极快的 Python 包和项目管理器
开发语言·python·rust
耿雨飞40 分钟前
Python 后端开发技术博客专栏 | 第 04 篇 Python 内存管理与垃圾回收 -- 从引用计数到分代回收
开发语言·python·垃圾回收
雾岛听蓝42 分钟前
Qt 输入与多元素控件详解
开发语言·经验分享·笔记·qt
执笔画流年呀1 小时前
多线程及其特性
java·服务器·开发语言