qt中实现多窗口切换

      qt提供了多种实现多窗口切换的框架,想QTabWidget,QStackedWidget,QDockWidget(也算是吧),这里说的“窗口切换”的意思是,在主界面上每次只显示一个窗口。系统自带的类使用起来很方便,但是也带有了自己的风格,譬如QTabWidget的切换时通过tab标签来进行窗口切换,这些标签在主窗口顶部,不会消失。QStackWidget也类似,跳转到其他窗口的控件总是存在于主窗口,有时这并不是想要的风格。

      这里介绍一下我在项目中使用的一种方式,也是经过多次尝试的。起初,我的想法是设置centralwidget,每一次切换窗口就把该窗口设置为中心部件,但是这么做发现每个窗口只能被切换一次,因为当把一个窗口设置为中心部件时,之前的窗口不是保持不变,也不是隐藏,而是被销毁了。如果再想显示之前的窗口,将它设置为中心部件,就会报出内存错误。

       所以我选择的方式是一般的布局管理器QVBoxLayout, QHBoxLayout(当然也可以尝试其他的)。mainwindow只设置一个中心部件widget,该widget的布局是一般布局管理器,对于该布局管理器,要显示该窗口时,就把该窗口添加到布局管理器,还应该把其他窗口从布局管理器中移走,这个方法似乎不太常用。

     showLayout->removeWidget(dscInterface); //移走不需要显示的窗口;

    dscInterface->setVisible(false);  //窗口设置为不可见。

   之后在布局管理器中就只会显示需要显示的窗口了。


   c++或者基于c++的QT是非常灵活的语言和平台,实现一个功能往往有多种方式,但是也该注意到作为语言和平台,它们内在遵循和维护的规则,是不可更改的,有时候达不到目的(就像使用centralwidget)并不是程序员的错,而是语言本身的固执。但是此路不通自然有别径,就算最后都实现不了,它肯定还会给你一些差强人意的解决办法。

 

你可能感兴趣的:(QT)