当前位置:网站首页>QT页面跳转的实现
QT页面跳转的实现
2022-08-09 15:02:00 【翔在天上飞】
目录
目标
通过程序QT程序设计实现页面跳转
背景案例
例如,我们在用QT做登录界面的时候,在验证完账号密码后需要实现一个页面的跳转,实现从登录界面到主窗口界面的跳转
背景阐述
现有myAPP和mylogin、mainw这三个类,并由myAPP这个类对mylogin和mainw这两个类进行统筹调度
实现思路
首先,我们是通过自定义的信号和槽函数,实现页面的跳转,自定义的信号,可以在其他的类中接收到该信号,并根据是否接收到该信号进行判断是否进行页面的切换显示,显示另一个界面
借助上面提到的例子,详细展开理解,现有一个页面mylogin和页面mainw,我们需要在页面mylogin中自定义一个信号,并且在页面mylogin中通过合适的方式,将这个信号用emit函数,发出
然后在myAPP这个总调度类实例化的对象中我们就可以接收到这个信号,接着,通过这个信号,在myapp这个总调度类中,使用connect函数连接一个槽,在槽函数中实现页面mainw的显示,这样就可以实现一个页面跳转,主要还是通过一个可以跨越类的信号来实现的。
实现原理
主要代码展示
1.mylogin类
mylogin.h中
signals:
void sig_login(QString usrname, QString usrpass);
public slots:
void do_login();
在mylogin这个类中,定义一个信号和一个槽函数
mylogin.cpp中
mylogin::mylogin(QWidget *parent)
: QDialog(parent)
{
this->init_ui();
connect(this->bnt_login, &QPushButton::clicked, this, &mylogin::do_login);
}
void mylogin::do_login()
{
emit sig_login(usr_name_le->text(), usr_pass_le->text());
}
通过按键,靠外界触发一个按键被按下的信号,然后传递给do_login()这个先前自己定义的槽函数, 在do_login()槽函数中具体实现对自定义信号sig_login()的发送,用到emit这个发送方法。
2.myapp类
myapp.h
public slots:
void do_log(QString usrname, QString usrpass);
在myapp这个总调度的类中,设置一个槽函数,用于接收来自mylogin类中的信号,并实现对界面mainw的开启显示。
myapp.cpp
myapp::myapp(QObject *parent) : QObject(parent)
{
this->login = new mylogin();
this->login->show();
connect(this->login, &mylogin::sig_login, this, &myapp::do_log);
}
void myapp::do_log(QString usrname, QString usrpass)
{
if(usrname == "Jack" && usrpass == "123456")
{
this->mainw->show();
this->login->close();
}
}
所有信号的发送都是需要实例化的对象来完成的,所以需要new一个mylogin对象,并通过connect函数建立mylogin对象和myAP对象的联系,信号是由mylogin对象发送出的,接收者是do_log这个在myapp中自定义的槽函数,并在槽函数中我们进一步实现对,mainw这个主界面的显示。
总结
本文主要利用信号和槽,通过信号建立各个类之间的联系,实现类与类之间的通信,如果对connect等函数还不是很熟悉的朋友,建议先学习一下函数用法,本文主要提供一种思路。当然,做法可能不止一种,我只是给出一种我的理解和做法,有不对的地方欢迎指正。
边栏推荐
- Vim实用技巧_1.vim解决问题的方式
- VRRP详解与配置实例
- Introduction to common commands in SQLMap
- Heap series _0x04: Internal structure of heap (_HEAP=_HEAP_SEGMENT+_HEAP_ENTRY)
- Data Fitting Methods Application of MATLAB in Mathematical Modeling (Second Edition)
- 基于FTP协议的文件上传与下载
- 杭州富阳科目三新规3号线考试攻略
- FFmpeg源码剖析-通用:ffmpeg_parse_options()
- RTP/RTCP协议的FFmpeg demux源码解析
- 堆(heap)系列_0x02:堆的前世今生(WinDbg+Visual Studio汇编)
猜你喜欢
随机推荐
【Postgraduate Work Weekly】(The third week)
杭州富阳科目三新规3号线考试攻略
go使用Consul实用指南
如何不使用第三个变量来交换两个数的值
TCP/IP协议组——完整工作过程分析
传输层协议TCP/UDP
wireshark抓包新手使用教程
聚集索引和非聚集索引
软件测试流程
SQLMap常用命令介绍
机器学习的基本术语
前置后置运算符重载
fiddler的下载与安装
【QT】窗口的显示与模态窗口
软件测试工具清单
使用libwebsockets搭建一个简单的websocket服务器
2022.7.22FPGA学习总结:项目实践——按键消抖模块
堆(heap)系列_0x09:堆破坏示例(非法访问+未初始化+堆句柄不匹配)
堆(heap)系列_0x06:NT全局标志和gflags.exe一页纸
Time series analysis