QT 您所在的位置:网站首页 界面怎么切换 QT

QT

2024-05-31 18:54| 来源: 网络整理| 查看: 265

使用QT-widget时多界面切换的StackedWidget方法 方法一:用 .hide() 和 .show()方法二: 使用StackedWidget(ui设计师) 刚转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())



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有