框架与核心概念

继续探索QT,这个专题研究QT最核心的内容

一、再次确认文件结构

pro是qt的工程文件,现在不用管。最后文章讲工程设置的时候再说。
main.cpp是主入口,一般而言不用管,但是可以点进去看看

一个非常直观的代码,建立一个窗体,然后show

接下来一对.h .cpp就是主窗体的类

在这里声明并定义了一个MainWindow
目前看不出什么特别的地方,稍后还会回过来再看

最后看.ui文件

双击.ui文件后会自动进入设计模式,这里要完成主要的UI设计任务

二、尝试增加控件

拖动一个按钮进入窗体

此时右下角变成按钮的属性设置

而且有意思的是如果再往下拉会看到不同的类型

实际上每个控件都是一系列的继承的结果
这里提供了一个清晰地设置每一个层次属性的方法

比如把text改一改,则按钮的文字就变化了

三、signals and slots mechanism

控件是增加了,但是如何响应用户事件呢?
这里要介绍QT的核心概念:signal and slot
每次用户进行一项操作,就是发出了一个signal,这个signal将被所有可以接收该类型signal的slot接收,并执行slot的响应函数

右键控件,go to slot来添加

确定后,.h .cpp会自动添加代码

上述所有步骤的意义就是为pushButton添加了一个点击响应函数,函数实现在.cpp里自己写,qt creator帮我们完成了其余的任务
另外还应该注意到一点,虽然添加了button,但是private里面依然是ui,这说明所有控件都被这个ui隐藏掉了
接下来的问题是如何在代码中获取对应控件并更改其属性呢?
看如下代码

ui是本身MainWindow自带的,可以直接用
这个MainWindow细分成4个部分,看这里

我们添加的pushButton是在centralWidget这里的,于是获取centralWidget
然后通过成员函数findChild,找到名字为pushButton的控件,返回指针
又因为我们知道这是一个按钮,所以类型转换
接下来获得了控件指针就可以操作了,比如这里更改文字显示

运行看看
最开始是这个

点击后变成这样

符合预期,因为我们就是在slot里面修改的文字显示。

Shortcut: 修改完UI后编译一次,qt会在幕后做一些工作。之后就可以使用ui->pushbutton直接获取目标控件了。