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(),也可以在前面的代码中使用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/532745.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苹果开发者后台添加udid后,xcode中 Devices 数量没有更新问题

删除 文件夹 /Users/…/Library/MobileDevice/Provisioning Profiles 如何打开:https://zhuanlan.zhihu.com/p/563928113 回到Xcode刷新包名下面的警告验证(可能需要翻墙) 完毕!

网站SEO关键词规划时如何筛选出合适的关键词?

在网站SEO优化过程中,关键词布局是一个至关重要的环节。首先,我们需要确定核心关键词,然后通过各种策略和方法对关键词进行扩展。完成关键词扩展后,接下来的任务就是对这些扩展后的关键词进行筛选。那么,如何进行有效的…

WordPress LayerSlider插件SQL注入漏洞复现(CVE-2024-2879)

0x01 产品简介 WordPress插件LayerSlider是一款可视化网页内容编辑器、图形设计软件和数字视觉效果应用程序,全球活跃安装量超过 1,000,000 次。 0x02 漏洞概述 WordPress LayerSlider插件版本7.9.11 – 7.10.0中,由于对用户提供的参数转义不充分以及缺少wpdb::prepare(),…

AI大模型之ChatGPT科普(深度好文)

目录 训练ChatGPT分几步? 如何炼成ChatGPT? 如何微调ChatGPT? 如何强化ChatGPT? 如何调教ChatGPT? AI思维链是什么? GPT背后的黑科技Transformer是什么? Transformer在计算机视觉上CV最佳作品? ChatGPT是人…

[leetcode]remove-duplicates-from-sorted-list

. - 力扣(LeetCode) 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2]示例 2: 输入&…

LeetCode-热题100:148. 排序链表

题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入: head [4,2,1,3] 输出: [1,2,3,4] 示例 2: 输入: head [-1,5,3,4,0] 输出: [-1,0,3,4,5] 示例…

2017NOIP普及组真题 4. 跳房子

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1417\ 核心思想 首先、本题中提到 “ 至少 要花多少金币改造机器人,能获得 至少 k分 ”。看到这样的话语,基本可以考虑要使用 二分答案。 那么,本题中…

Java快速入门系列-7(测试与调试)

第七章:测试与调试 第7章:测试与调试7.1 单元测试(JUnit)7.1.1 为什么要进行单元测试7.1.2 JUnit基础7.1.3 断言7.1.4 测试套件7.2 集成测试与系统测试7.2.1 集成测试7.2.2 系统测试7.3 调试技巧与工具7.3.1 断点7.3.2 单步执行7.3.3 变量检查7.3.4 条件断点7.3.5 日志记录…

手动实现简易版RPC(一)

手动实现简易版RPC(一) 前言 什么是RPC?它的原理是什么?它有什么特点?如果让你实现一个RPC框架,你会如何是实现?带着这些问题,开始今天的学习。 本文主要介绍RPC概述以及一些关于RPC的知识,为…

网络安全指南:安全访问 Facebook 的技巧

在当今数字化时代,网络安全问题越来越受到人们的关注。尤其是在社交媒体平台上,如 Facebook 这样的巨头,用户的个人信息和隐私更容易受到威胁。为了保护自己的在线安全,我们需要采取一些措施来确保在使用 Facebook 时能够安全可靠…

GET与POST:详述HTTP两大请求方法的语义、数据处理机制、安全特性与适用场景

GET和POST方法在HTTP请求中具有明确的角色分工和特性差异。GET适用于读取操作和不敏感数据的传递,强调可缓存性和安全性,而POST适用于写入操作和敏感数据的提交,提供了更大的数据承载能力和更强的隐私保护。本文详细介绍了GET与POST请求方法的…

利用Sentinel解决雪崩问题(二)隔离和降级

前言: 虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障。而要将这些故障控制在一定范围避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了,不管是线程隔离还是熔断降级,都是对客户端(调…

实战篇05:更新用户基本信息

实战篇05:更新用户基本信息 一、接口信息 1.1 基本信息 请求路径:/user/update 请求方式:PUT 接口描述:该接口用于更新已登录用户的基本信息(除头像和密码) 1.2 请求参数 请求参数格式:application/json 请求参数说…

2024 年 3 月公链行业研报:比特币创新高、Meme 掀热潮、AI 板块露头角

作者:stellafootprint.network 数据来源:Footprint Analytics 公链研究页面 3 月份,加密市场表现强劲,比特币再创历史新高。以太坊价格稳步攀升,而坎昆升级则显著降低了交易成本。Solana 链上 Meme 热潮席卷而来&am…

nandgame中的Memory(内存操作):栈、堆、静态区

Push Memory Push Memory 将内存中的值push到栈内堆栈顶部的值是一个内存地址。从堆栈中弹出地址。获取内存地址的当前内容,并将其推送到堆栈上。POP_A //堆栈顶部的值是一个内存地址。从堆栈中弹出地址。 D *A //获取内存地址的当前内容 PUSH_D //将其推送到…

拉普拉斯IPO丨用创新科技助力中国光伏产业高质量发展

近年来,在“以科技创新引领现代化产业体系建设”的战略指引下,整个光伏行业持续推动技术迭代与生产力升级,朝着更高光电转化效率、更低成本加速迈进。 在此背景下,一批以技术驱动为第一生产力的光伏厂商们,在自身领域…

APP被DDoS攻击时,企业应该如何防护?

某平台遭到分布式拒绝服务攻击,大规模、持续性的攻击,导致平台的APP、网站的部分用户出现间歇性无法登录、加载失败或缓慢等情况。据了解,平台在一个月的时间内陆续遭受到近30次的网络攻击。在这段时间内,平台不断地接收到短时间、…

虚拟货币:数字金融时代的新工具

在数字化时代的到来之后,虚拟货币逐渐成为了一种广为人知的金融工具。虚拟货币是一种数字化的资产,它不像传统货币那样由政府或中央银行发行和监管。相反,虚拟货币通过密码学技术和分布式账本技术来实现去中心化的发行和交易。 虚拟货币的代…

Nodejs 第六十三章(串口技术)

串口介绍 串口技术是一种用于在计算机和外部设备之间进行数据传输的通信技术。它通过串行传输方式将数据逐位地发送和接收。 常见的串口设备有,扫描仪,打印机,传感器,控制器,采集器,电子秤等 SerialPort …

ES6 关于Class类的继承 extends(2024-04-10)

1、简介 类Class 可以通过extends关键字实现继承,让子类继承父类的属性和方法。extends 的写法比 ES5 的原型链继承,要清晰和方便很多。 class Foo {constructor(x, y) {this.x x;this.y y;console.log(父类构造函数)}toString() {return ( this.x …