QT-widget时多界面切换的StackedWidget方法

使用QT-widget时多界面切换的StackedWidget方法


刚转QT没多久,项目使用widget,需要进行同窗体界面切换,于是找到一些方法,整理一下:

初写此文章时刚学嵌入式QT,使用的还是走CPU的widget,对于4.7后出现的qml还未涉及。相信肯定有更好更直观的办法,所以如果还有其他更好的方法请一定要不吝赐教!大家一起学习:)

方法一:用 .hide() 和 .show()

这个方法比较直观,因为QWidget是所有可视控件的基类,所以由QWidget继承而来的类,都会有 ..hide().show() 一个显示,一个隐藏。
可以简单的实现界面切换。
但这个方法使用起来却有一点小瑕疵: 因为这是窗口的切换,所以在切换的时候会一跳一跳(弹出窗口的动画),非常影响观感,故在此记录第二种方法。


方法二: 使用StackedWidget(ui设计师)

这种方法可以同一个界面里,根据选择变换其他窗口:
原图链接https://www.cnblogs.com/fuqia/p/8882527.html
上图出处
一般都是用代码编写ui中new一个QStackedWidget,但是我设计ui时使用ui设计师来设计居多,故使用了工具带的那个StackedWidget
它长这样:
在这里插入图片描述
本质上和pushButton等控件一样,哪个类新建它,它就在哪个类的内存里。

既然它可以根据用户点击\信号,显示对应的小界面,那如果我把这个控件放大到塞满整个屏幕,然后用来切换显示我想要的界面呢?


就可以丝滑的显示窗口切换了~ 因为它还是同一个窗口,所以在切换的时候不会有“窗口突然跳出来”的动画,在观感上就很舒服。

PS:灰色背景色是我自己加的,四个pushButton放在了widget页面的四个角,用来提示当前界面的边界在哪

在这里插入图片描述
使用也很简单,可以直接在ui设计师里面右键添加新页面,然后拖动添加新控件。

也可以像下面这样,新建几个页面类,然后用代码把页面添加进stackedWidget
添加、切换页面的代码:

添加页面--------------------------------------------------------
aaa test1;
bbb test2;
ui->stackedWidget->addWidget(&test1);
ui->stackedWidget->addWidget(&test2);


选择显示哪个页面-------------------------------------------------
ui->stackedWidget->setCurrentIndex(1);
ui->stackedWidget->setCurrentIndex(2);

PS: 默认当前的界面【this】是CurrentIndex(0) 第一个界面,
故根据顺序,手动添加的第二个界面就是CurrentIndex(1)。以此类推

在这里插入图片描述
然后就可以愉快的用stackedWidget控件直接切换页面啦~

另外需要注意的是,这个StackedWidget组件并不会帮你自动适配要显示界面的大小,也就是说如果你像我一样用StackedWidget显示不同功能界面,那在实际使用中对应界面注意下窗口适配(由于都从QWidget继承而来,所以有.resize等常用成员函数):
在这里插入图片描述

这张图里就很清楚了,界面2很小,切换过来明显铺不满整个stackedWidget,实际使用中如果窗口变动要注意适配窗口大小


如果还有其他更好的方法请一定要不吝赐教!!

提一嘴,QT 中,信号与槽是否是同一条线程要看connect函数的第五个参数。
直接连接是信号发出同时 立刻执行 槽函数,跟回调类似,是在同一条线程。执行完槽函数才会继续往下执行。
队列连接发出信号后,信号会放到接收方的事件队列 等待执行 ,并不是同一条线程,等接收方空闲事件循环才会调用槽函数。
自动连接 这是默认参数,让Qt自行选择。如果信号发送方和接收方在同一线程中,就使用直接连接;否则使用队列连接。
简单理解:把直连当成同步,信号发出立刻调用槽;队列当成异步,等接收方空闲下来才会处理。(如果实在需要立刻响应,就调用QCoreApplication::processEvents())


### 将WSL2迁移至D盘的方法 #### 查看当前WSL版本和支持的发行版 为了确认当前环境中的WSL版本以及已安装的Linux发行版名称,需执行命令`wsl -l -v`[^1]。 #### 停止目标WSL子系统 通过运行`wsl --terminate Ubuntu-22.04`来终止指定的WSL实例。这里假设使用的发行版名为Ubuntu-22.04;实际操作应替换为具体环境中对应的名称。 #### 导出现有系统的备份文件 利用命令`wsl --export Ubuntu-22.04 D:\Ubuntu_bak.tar`可将现有的WSL子系统导出到指定路径下的`.tar`压缩包中。此过程会创建一个完整的镜像副本用于后续恢复或转移用途。 #### 移除旧有的WSL配置 执行`wsl --unregister Ubuntu-22.04`以彻底卸载并清理掉原有的WSL设置及其关联数据。这一步骤对于干净地重建新的实例至关重要。 #### 进行新位置上的导入工作 采用如下指令完成向D盘的新建部署:`wsl --import Ubuntu-22.04 d:\Ubuntu-wsl D:\Ubuntu_bak.tar`。该语句指定了要加载的操作系统映像源文件的位置,并定义了其在本地磁盘内的存储目录结构。 #### 设置新版WSL为所需模式 最后一步是调整新建好的WSL实例的工作方式, 使用`wsl --set-version Ubuntu-22.04 2`将其设定成性能更优、兼容性更好的第二代架构形式——即WSL 2。 上述流程不仅适用于简单的备份与恢复场景,在跨分区移动整个虚拟化操作系统方面同样有效。值得注意的是,所有涉及的具体路径和分发名都需要依据个人实际情况作出相应修改。 ```bash # 示例代码片段展示如何实现这些步骤 $ wsl -l -v # 列举所有可用的 Linux 发行版及其状态 $ wsl --terminate <Your_Distro_Name> # 关闭选定的 WSL 实例 $ wsl --export <Your_Distro_Name> "D:\Backup\distro_backup.tar" # 备份当前环境 $ wsl --unregister <Your_Distro_Name># 卸载原生WLS实例 $ wsl --import <New_Distro_Name> "<Path_to_New_Location>" "<Path_to_Backup_File>.tar"# 新建于其他驱动器上 $ wsl --set-version <New_Distro_Name> 2 # 设定为 WSL 2 版本 ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值