Qt Designer:更改窗口的基类

mar*_*ipf 16 c++ user-interface qt

我已经在Qt Designer中为我的应用程序创建了第二个窗口.我读到QMainWindow将是第二个窗口的错误类(基本上应该只是某种对话框),所以我想改变基类.

我的问题是:

  1. 有没有办法在不创建新窗口的情况下更改基类并将我的代码复制到新文件中?
  2. 有人可以解释何时使用QMainWindow,QDialog和QWidget?我没有找到Qt中这三个基类之间差异的良好解释.

Rob*_*ert 6

  1. 要更改基类,您只能更改头文件中的: public QMainWindowto : public QWidget(或反之亦然),当然还有*.cpp.

  2. 基本上所有三个都是QWidgets,每个都有特殊功能或用于特定目的.据我所知,QMainWindow有工具栏,菜单栏和码头,QDialog将始终显示为一个单独的窗口(例如阻塞,非阻塞等),QWidget本身就是基类.即QPushButton,QCombobox也来自QWidget.在我看来,最好只使用一个QMainWindow,因为它应该是用户交互/导航的中心点

编辑:我忘了提到还必须更改UI文件,即使用文本编辑器,更改行(我认为第4行)

<widget class="QMainWindow" name="YourClassName">
Run Code Online (Sandbox Code Playgroud)

至

<widget class="QWidget" name"YourClassName">
Run Code Online (Sandbox Code Playgroud)

并删除所有QMainWindows相关部分(菜单栏,工具栏,...),以及中央窗口小部件的封闭标记.

感谢alexisdm提示.

  • 不,ui_xxx.h文件仅基于.ui文件生成.并且设计者在选择后不允许更改顶部窗口小部件的基类,从设计者的角度来看,唯一的方法是将所有窗口小部件复制/粘贴到另一个具有" QWidget`作为其根,并为该根重新应用新布局(因为根布局似乎没有与其余布局一起复制).也可以通过删除所有`QMainWindow`相关部分(菜单栏,工具栏,...)以及中央窗口小部件的封闭`<widget>`标记来手动编辑.ui xml文件. (3认同)

Jam*_*orn 5

您可以采用 @Robert 的方法,但最简单的方法是在 Qt Designer 中创建一个新的表单类,然后在 Qt Designer 中复制原始小部件的内容并将它们粘贴到新的小部件中。

见也。