Qt_01
1.从创建QT项目说起
(1)
创建 App
创建 Qt Widgets App ,Widgets就是模块。
(2)
选择路径,路径不能包含中文。
(3)
选择编译工具链。
(4)
指定类信息,Qt提供三种基类,我们将创建基类的派生类。这里使用基类QWidget。
(5)
三个符号,分别是,编译并且运行,编译调试,编译不运行。
2.使用QWidget基类的默认信息
(1)main.cpp
(2)widget.h
(3).pro (一个脚本文件,和makefile有关,主要控制makefile时连接的模块)
Qt的模块
以下使用c++
Widgets:GUI
Webkit: 浏览器引擎
Test: 测试单元
SQL: 数据库
Mulitmedia Widgets: 多媒体
Mulitmedia: 多媒体
Network: 网络
Core: 自带模块
GUI: 自带模块
以下使用js语言
Quick
QML
(3)一般使用的框架
(4)简单的使用
这样,我学会了各个窗口显示按键控件,但按按键还不能触发事件,接下来就要使用connect。
注:
(1)将这些初始化代码写到main中不好,因为main会变得很臃肿,所以正确的写法是,写到构造函数中。
(2)在构造函数使用别的类的对象,要使用组合实现,不要使用继承。
这样当我按下a1对象时,窗口就会关闭。
3.使用connect
详细看下connect:
当前还没有学习connect的实现原理,但是根据使用可以猜测:
Connect使用了两种方法:
(1) 函数指针做参数,实现函数回调,实现了connect逻辑和具体方法的解耦和。
(2) 进程的信号机制,实现了进程的通信。
大胆猜想下connect的业务逻辑:
当鼠标点击对象a2后,和鼠标相关的那个进程发出了一些列信号,其中包含released信号,widgets进程收到信号,由于a2与released信号绑定,所以widgets进程会处理released信号,处理的方法就是第三个参数如this,*this通过函数回调执行Mysolt。
其他细节:
由于使用的是自带的信号,所以初次使用可能不知道有哪些信号可用,所以需要使用F1,
具体如下:
因为信号是QPushButton类的成员,所以F1查看QPushButton
看 Contents 发现没有Signals,所以 Signals 是继承来的,
追踪父类。
发现了 Signals
追踪
自此,我大致学会了单个窗口的简单操作。
下面,我将学习两个窗口的操作。
4.使用信号
我希望实现的是:
两个窗口,主窗口点击切换窗口按键,主窗口消失,次窗口出现。
次窗口点击切换窗口按键,次窗口小时,主窗口出现。
再添加一个窗口,就是再加一个类,创建新文件时同样继承QWidget即可。
要让两个对象关联起来,我选择用组合,主窗口类组合次窗口类。
但是组合只能实现单工的联系,
这时就要用自定义信号了。
次窗口.h
次窗口.cpp
次窗口对象的button对象按下后,发出信号。
然后让主窗口接受这种信号,所以主窗口的构造函数需要添加这句话。
5.目前使用到的快捷键
F1:查手册
F4:切换.h和.cpp
Ctrl + R :编译并运行。