qt中实现多窗口切换
2015-11-16 14:40
441 查看
qt提供了多种实现多窗口切换的框架,想QTabWidget,QStackedWidget,QDockWidget(也算是吧),这里说的“窗口切换”的意思是,在主界面上每次只显示一个窗口。系统自带的类使用起来很方便,但是也带有了自己的风格,譬如QTabWidget的切换时通过tab标签来进行窗口切换,这些标签在主窗口顶部,不会消失。QStackWidget也类似,跳转到其他窗口的控件总是存在于主窗口,有时这并不是想要的风格。
这里介绍一下我在项目中使用的一种方式,也是经过多次尝试的。起初,我的想法是设置centralwidget,每一次切换窗口就把该窗口设置为中心部件,但是这么做发现每个窗口只能被切换一次,因为当把一个窗口设置为中心部件时,之前的窗口不是保持不变,也不是隐藏,而是被销毁了。如果再想显示之前的窗口,将它设置为中心部件,就会报出内存错误。
所以我选择的方式是一般的布局管理器QVBoxLayout, QHBoxLayout(当然也可以尝试其他的)。mainwindow只设置一个中心部件widget,该widget的布局是一般布局管理器,对于该布局管理器,要显示该窗口时,就把该窗口添加到布局管理器,还应该把其他窗口从布局管理器中移走,这个方法似乎不太常用。
showLayout->removeWidget(dscInterface); //移走不需要显示的窗口;
dscInterface->setVisible(false); //窗口设置为不可见。
之后在布局管理器中就只会显示需要显示的窗口了。
c++或者基于c++的QT是非常灵活的语言和平台,实现一个功能往往有多种方式,但是也该注意到作为语言和平台,它们内在遵循和维护的规则,是不可更改的,有时候达不到目的(就像使用centralwidget)并不是程序员的错,而是语言本身的固执。但是此路不通自然有别径,就算最后都实现不了,它肯定还会给你一些差强人意的解决办法。
这里介绍一下我在项目中使用的一种方式,也是经过多次尝试的。起初,我的想法是设置centralwidget,每一次切换窗口就把该窗口设置为中心部件,但是这么做发现每个窗口只能被切换一次,因为当把一个窗口设置为中心部件时,之前的窗口不是保持不变,也不是隐藏,而是被销毁了。如果再想显示之前的窗口,将它设置为中心部件,就会报出内存错误。
所以我选择的方式是一般的布局管理器QVBoxLayout, QHBoxLayout(当然也可以尝试其他的)。mainwindow只设置一个中心部件widget,该widget的布局是一般布局管理器,对于该布局管理器,要显示该窗口时,就把该窗口添加到布局管理器,还应该把其他窗口从布局管理器中移走,这个方法似乎不太常用。
showLayout->removeWidget(dscInterface); //移走不需要显示的窗口;
dscInterface->setVisible(false); //窗口设置为不可见。
之后在布局管理器中就只会显示需要显示的窗口了。
c++或者基于c++的QT是非常灵活的语言和平台,实现一个功能往往有多种方式,但是也该注意到作为语言和平台,它们内在遵循和维护的规则,是不可更改的,有时候达不到目的(就像使用centralwidget)并不是程序员的错,而是语言本身的固执。但是此路不通自然有别径,就算最后都实现不了,它肯定还会给你一些差强人意的解决办法。
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- Qt for Android开发实例教程
- QModelIndex/Role/Model介紹<二>
- 基于PyQt5的快速开发框架QFramer
- OSX下安装PyQt
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO
- ubuntu下opencv和qt的安装配置
- linux下opengl的安装(with qt)
- qt 学习小节
- QT的命名风格
- QT 中的sleep
- QT 串口的监控