c++ - Qt 设计器 : Changing the base class of a window

标签 c++ qt user-interface

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

我的问题是:

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

最佳答案

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

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

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

<widget class="QMainWindow" name="YourClassName">

<widget class="QWidget" name"YourClassName">

并删除所有与 QMainWindows 相关的部分(菜单栏、工具栏...)以及中央小部件的封闭标签。

感谢 alexisdm 的提示。

关于c++ - Qt 设计器 : Changing the base class of a window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17605046/

相关文章:

c++ - BitBlt 忽略 CAPTUREBLT 并且似乎总是捕获目标的缓存拷贝

c++ - 为什么我没有收到 OnClicked 函数的响应?

Qt之类的C框架?

user-interface - 用户是否应该实时查看自己的性能统计数据

java - 寻找更好的方法让JLabel淡入/淡出

c++ - 具有大整数的牛顿-拉夫森除法

c++ - Sqlite3 ORM for C++ 实现延迟加载

c++ - 获取打开的 QIODevice 的校验和

c++ - 在多个 ui 文件之间拆分 Qt 表单

.net - WPF UI 更新细节