QT-多界面切换的几种方法

QT-多界面切换的几种方法

  • 方法一:用 .hide() 和 .show()
  • 方法二: 使用StackedWidget(ui设计师)

刚转QT没多久,作为一个小菜鸟,做项目中需要进行同窗体界面切换,于是找到一些方法,整理一下:

如果还有其他更好的方法请一定要不吝赐教!大家一起学习:)

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

这个方法比较直观,因为QWidget是所有可视控件的基类,所以由QWidget继承而来的类,都会有 ..hide().show() 一个显示,一个隐藏。
可以简单的实现界面切换,如果把这个类放在界面类所在线程一起跑,就可以不用信号控制
初始化要显示的多个界面:
QT-多界面切换的几种方法_第1张图片
由于和ui在同一片内存空间,故可以直接实例化和调用
示例这里我是根据输入,就显示对应界面(低级代码见笑了-_-)
QT-多界面切换的几种方法_第2张图片


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

方法一很简单,但是使用起来却有一点小瑕疵: 因为这是窗口的切换,所以在切换的时候会一跳一跳(弹出窗口的动画),非常影响观感,故在此记录第二种方法。
这种方法可以同一个界面里,根据选择变换其他窗口:
QT-多界面切换的几种方法_第3张图片
上图出处
一般都是用代码编写ui中new一个QStackedWidget,但是我设计ui时使用ui设计师来设计居多,故使用了工具带的那个StackedWidget
它长这样:
QT-多界面切换的几种方法_第4张图片
本质上和pushButton等控件一样,哪个类新建它,它就在哪个类的内存里。

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


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

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

QT-多界面切换的几种方法_第5张图片
使用也很简单,可以直接在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)。以此类推

QT-多界面切换的几种方法_第6张图片
然后就可以愉快的用stackedWidget控件直接切换页面啦~

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

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

总结:
方法一由于在调用到的时候才.show() ,所以可以在需要的时候才实例化new这个类,而方法二最好页面类和主界面类一起初始化后,才能放入stackedWidget组件里,否则就是在操作空的内存。
如果还有其他更好的方法请一定要不吝赐教!!

你可能感兴趣的:(QTC++,c++,linux,qtcreator,qt)