Qt入门基础知识(1)
Qt历史版本
- Trolltech公司:Qt1~3
- 诺基亚公司:Qt4
- Digia公司:Qt5
PS:Qt4和Qt5不能兼容,前者简易但是建议学习后者
开发方法
- C++ Qt
- QML(一套类似于XML的专门语言)
- PyQt
安装方法
-
下载地址
-
mac下为dmg后缀安装包,win下为exe后缀安装包,ubuntu下为run后缀安装包。ubuntu下的run文件,需要先
chmod 777 XXX
,再使用./ XXX
即可作为可执行文件运行 -
安装时候要选定全部安装,避免出现依赖问题。另外安装时要求登录,Qt密码格式为“@+字母组合+数字组合”
编译方式
-
Debug: 保存编译信息,便于调试,不作任何优化
-
release: 被优化以实现最小的代码和速度,生成执行文件的发布版本,没有调试信息
-
profile:在执行软件期间分析CPU利用率和存储器占用率。它还可用于发现和分析异常和错误
目录文件
PS:手动编译方法
- qmake -project ->.pro
- qmake ->makefile
- make ->可执行文件
- .pro文件:记录文件信息
- makefile:多文件编译时候告诉编译器有那些文件需要编译,不同平台下不同以实现跨平台。由Qt通过pro文件,根据平台不同自动生成
- .c和.h
- .o文件:编译中间文件
- .ui文件:视图,界面设计管理,将外观和功能代码分离(MVC设计模式,model+view+control)。Qt默认界面和控制分离,需要数据处理需要自己单独写。
两个主要学习目标
- 界面怎么写
- 怎么处理点击或其他用户事件
基类型
Qobject是绝大部分类的父类,任何对象都有一个唯一的objectName的属性
Qwidget是所有GUI的基类,具有外观
控件位置
坐标原点是窗口左上角,控件坐标是控件的左上角相对窗口左上角的位置
布局策略
为什么在“Lable+Line edit”的组合Layout中,对Layout进行拉伸,Lable长宽不会变而Line edit会变?
见Qwidget里的sizePolicy,即尺寸策略
常用的有三个:
- Fixed:不变
- Preferred:最佳(自适应,Qt自己的策略)
- Expading:跟随拉伸
- Ignored:忽略原来设定的宽高
另外,在布局之后可以在Layout的layoutStrench中进行布局内部控件占据比例的设定
也可以添加spacer(功能正如其弹簧形状所示)用于留出空白部分,以控制相对距离
PS:centralwidget上有一个“打破布局的禁止标”,是因为没有进行全局布局,可以点击centralwidget,再点击上方工具栏的布局,可以消除这个小标
缩放设置
在minimumSize和maximumSize中修改可以使得对于窗口的拉伸限制在一定范围。而将最大最小值设置为一致,则窗口为固定大小,不能进行缩放。
PS:mac下面有bug,最大最小值一致时,不能进行边缘拉伸,但是可以点按钮最大化,且最大化后不能最小化
Label下的文字设置
- Qwidget -> Font
- Qwidget -> stylesheet
- QLabel -> alignment
信号与槽机制
某个元素接收到什么信号 -> 某个元素执行什么动作
基础Qt的学习目标:
- 有什么控件
- 控件可以发出什么信号
- 槽函数
信号与槽机制实现方法
最基本实现方法:
connect(谁,发出什么信号,谁,执行什么操作)
connect(this->ui->btn1,SIGNAL(clicked(bool)),this,SLOT(login()));
另外在某些需求时可以使用disconnect函数
,用法同上
使用connect函数实现,需要修改三个地方:
- 在project.h中添加槽函数声明
private slots: void login();
- 在project.cpp中,构造函数内,
ui->setupUi(this);
下方添加connect函数 - 在project.cpp末尾添加槽函数函数定义
信号与槽机制其它实现方法
- connect函数
- 在designer中右键控件,转到槽,会在project.c中自动生成函数块(代码量少,但不易读)。
此方法除了在project.c中生成代码块,还会在自动在project.h的private slots里生成一个函数声明,删除的时候要注意一起删除,否则会报错。
ps: 另外还有两种实现方法,用的极少,暂不介绍
文档阅读
- 用索引Look for进行条目查询,若在对应contents内没有找到需要的内容,考虑是不是继承自父类,转向父类寻找
共性举例:
-
bool值属性:
设置:set+属性名
获取:(属性名 / is+属性名) 其一 -
int / icon值(等其他)属性:
设置:set+属性名
获取:属性名
Cmake
- 用编辑器编写源代码,如.c文件。
- 用编译器编译代码生成目标文件,如.o。
- 用链接器连接目标代码生成可执行文件,如.exe。
make指令根据makefile文件进行批量编译
cmake指令根据cmakelist文件自动生成makefile文件