一、布局初探:Qt Designer 界面介绍、创建第一个带按钮的窗口、理解父窗口与子控件的关系

各位同学,欢迎来到《Qt界面布局从入门到精通》的第一课。

说实话,每次带新人入门Qt,我最怕的就是一上来就讲代码、讲继承、讲虚函数。把人吓跑了怎么办?所以我个人习惯——先让大家用上Qt Designer,拖拖拽拽,先看到效果,再慢慢理解背后的原理。

这一章,我们就从最基础的开始:认识Qt Designer,创建你的第一个带按钮的窗口,然后搞清楚一个核心概念——父窗口与子控件的关系。

1.1 Qt Designer 是什么?

Qt Designer,说白了就是一个可视化的界面设计工具。你不需要手写一行布局代码,就能把按钮、文本框、标签这些控件拖到窗口上,调整大小、位置,然后保存成一个.ui文件。

我在项目中遇到过不少新手,一上来就纯手写代码做界面,结果改个按钮位置要改半天。其实用Designer,5分钟就能搞定。

打开Qt Designer后,你会看到这样一个界面:

核心区域一览:

  • 左侧:控件面板(Widget Box)——放着所有你能用的控件,比如按钮、标签、输入框等
  • 中间:设计画布(Form)——你拖拽控件的地方,所见即所得
  • 右侧上方:对象查看器(Object Inspector)——显示当前窗口里所有控件的层级关系
  • 右侧下方:属性编辑器(Property Editor)——选中某个控件后,在这里改它的各种属性

嗯,这里要注意:很多人第一次打开Designer会懵,觉得东西太多。其实你只需要记住一句话——左边拿控件,中间摆控件,右边改属性。就这么简单。

1.2 创建第一个带按钮的窗口

好,我们直接动手。打开Qt Designer,点击“新建”,选择“Main Window”(主窗口),然后点“创建”。

你会看到一个空白的窗口出现在画布上。现在,从左侧的控件面板里找到“Push Button”(按钮),按住鼠标左键,把它拖到中间的窗口上。

松开鼠标,一个按钮就出现了。是不是很简单?

接下来,我们改改按钮上的文字。选中按钮,在右侧的属性编辑器里找到“text”这一行,把默认的“PushButton”改成“点击我”。按回车,按钮上的文字就变了。

小技巧: 我个人习惯在改属性时,先双击属性值,再按回车确认。这样不容易误操作。另外,按钮的“objectName”属性建议也改一下,比如改成“btnClick”,方便后面写代码时引用。

保存这个文件,命名为“my_first_window.ui”。

你可能会问:保存成.ui文件有什么用?其实.ui文件就是一个XML格式的文本文件,里面记录了窗口和控件的所有信息。Qt可以读取这个文件,自动生成对应的C++代码。

1.3 理解父窗口与子控件的关系

这是本章最核心的概念,我建议你认真看。

刚才我们创建了一个主窗口,然后在上面放了一个按钮。在这个场景里:

  • 主窗口就是父窗口(Parent Widget)
  • 按钮就是子控件(Child Widget)

为什么会这样?因为按钮是“属于”这个窗口的。你移动窗口,按钮跟着移动;你关闭窗口,按钮也跟着消失。这就是父子关系最直观的体现。

注意: 在Qt里,父子关系不仅仅是视觉上的包含关系,它还决定了内存管理。父窗口被销毁时,会自动销毁所有子控件。我曾经见过有人手动去delete子控件,结果程序崩溃了——因为父窗口已经帮你做了这件事。记住:不要手动删除有父对象的子控件。

在Qt Designer的对象查看器里,你可以清楚地看到这种层级关系。展开“MainWindow”,下面会有一个“centralWidget”(中心部件),再下面才是你放的按钮。这个“centralWidget”是MainWindow默认自带的,所有控件都放在它上面。

我们画一张图来理清这个关系:

父窗口(MainWindow) centralWidget(中心部件) 子控件:按钮 属于 属于 父窗口 → centralWidget → 按钮(层层包含)

你想想看,这种父子结构有什么好处?

  • 自动布局:子控件的位置是相对于父窗口的。你移动父窗口,子控件自动跟着走。
  • 自动销毁:父窗口关闭时,所有子控件的内存自动释放,不用你操心。
  • 事件传递:鼠标点击、键盘输入等事件,会从父窗口传递到子控件,或者反过来。

核心总结:

在Qt里,父子关系是界面组织的基石。每个控件都必须有一个父对象(除了顶层窗口)。没有父对象的控件,就是一个独立的窗口。我们在Designer里拖拽控件时,实际上就是在建立这种父子关系。

1.4 从.ui文件到运行的程序

保存好.ui文件后,怎么让它跑起来?有两种方式:

  1. 用uic工具编译:在命令行执行 uic my_first_window.ui -o ui_my_first_window.h,会生成一个C++头文件,里面包含了界面类的定义。
  2. 在代码中动态加载:用 QUiLoader 类在运行时加载.ui文件,适合快速原型开发。

我个人更推荐第一种方式,因为编译后的代码效率更高,也更容易调试。

避坑指南: 我曾经在项目里用动态加载.ui文件,结果发现程序启动时慢了一两秒。后来改成编译方式,启动速度明显提升。如果你的界面比较复杂,建议用编译方式。

好了,这一章的内容就到这里。你学会了:

  • Qt Designer的基本界面和操作
  • 如何创建带按钮的窗口
  • 父窗口与子控件的父子关系

下一章,我们会深入布局管理器的世界,看看怎么让控件自动适应窗口大小变化。嗯,到时候你会发现,手动拖拽定位其实是最笨的办法。

可可精品资料库