文章目录
- 一、main.cpp代码解析
- 二、widget.h代码解析
- 三、widget.cpp代码解析
- (一) form file
- 四、.pro Qt项目的工程文件
一、main.cpp代码解析
main函数的形参就是命令行参数。qt是C++Definitely图形界面化编程,要想编写一个qt的图形界面程序,一定要有QApplication对象。
Widget则是在创建项目的时候填写的生成的类名。
.show()方法让控件显示出来。.hide()方法让空间隐藏。Widget的父类是QWidget,show和hide两个方法都是由QWidget提供的。a.exec()方法表示让程序执行起来。之前在Linux中,也学过六个函数(exec*)exec家族,用于进程程序替换,把可执行文件中的代码和数据,替换到当前进程中。
Qt中的exec和Linux中的exec没有任何关系。只是名字恰好一样的。
二、widget.h代码解析
ifndef用来保证头文件只被包含一次。也可以使用 #pragma once
用于定义一个Qt的命名文件和声明一个名为 Widget 的类。QT_BEGIN_NAMESPACE 这是一个命名空间开始标记。在这个命苦空间中,创建了一个Ui的子命名空间。在Ui的命名空间中,声明了一个Widget的类,但是并没有提供类的具体定义。QT_END_NAMESPACE是命名空间结束标记。
Widget是我们创建项目的时候,所命名的类,继承QWidge。这个父类是Qt SDK内置的。要想使用这个类,就需要包含对应的头文件。 #include <QWidget>
。在qt中使用内置的类,包含的头文件的名字就是和类名一致的。当然也可能存在间接包含。后续写代码的原则就是,一个qt的类,先用,如果直接能用,说明对应的头文件已经间接被包含过了,无需显示的在包含一遍,如果这个类找不到,包含对应头文件即可。
Qt中引入了对象树机制,后面会介绍。创建Qt的对象就可以把这个对象给挂到对象树上,往树上挂的时候就需要指定父节点。
Q_OBJECT是一个Qt内置的宏,宏本质上是文本替换。Q_OBJECT展开之后,就会生成一大堆代码。Qt中有一个非常核心的机制,信号和槽。如果某个类想使用 信号和槽 就需要引入Q_OBJECT这个宏
这个东西跟是密切相关的。用来做ui。
可以用拖拽的方式,实现对界面的操作。
三、widget.cpp代码解析
这个文件中的代码并不复杂,
创建项目生成的头文件。
form file 被 qmake 生成的头文件
把 form file生成的界面和当前的widget关联起来。把new的对象给释放了。
(一) form file
再双击widget.ui之后,会进入到一个图形化的界面编辑器。
左边的Layouts,Spacers等都是一些控件,拖拽到右侧的界面上可以创建出控件。
在右下角可以编辑你拖拽的控件,修改控件的属性(字体大小,颜色)等。
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
</widget>
<resources/>
<connections/>
</ui>
这个界面编辑器的源码是xml格式。跟html挺类似的,都是使用成对的标签来表示数据。
四、.pro Qt项目的工程文件
表示我们当前引入的模块,后面会引入一些其他的模块。
表示当前项目中,参与构建的文件都有什么(编译器要编译哪些文件)这个地方不需要手动修改,Qt Creator 帮咱们自动维护好。
上面看到的头文件,cpp文件等都是源代码,如果编译运行qt项目,会生成一些其他的文件。
运行代码之后,生成了一个build……的文件夹。
这些都是自动生成的文件。
编译Qt程序,还是会用到Makefile文件,这个文件是qmake自动生成的。
在debug文件夹中,存在一个.exe文件,这个文件就是在项目运行之后生成的,双击.exe文件,就可以运行项目了。