什么是Qt
Qt就是c++的一种跨操作系统平台的可视化开发工具
qt5.15.2的下载
安装过程中出现network error while......时的解决办法
创建项目
application是什么
application应用程序
作用
QApplication---界面应用入口
也就是 只要是要建立界面的QT项目都需要QApplication应用程序。
exec()进入时间循环和消息处理
函数
QApplication a(argc, argv);
argc和argv是命令行传进去的参数。比如linux里输入一个命令
cp file.c file1.c
那么argc=3 argv就是上面那行字符串数组。
因为图形编程有时也需要从命令行传递参数给程序,所以才会有argc和argv。
QT高分屏处理
高分屏---高分辨率屏幕
分辨率--链接
如果QT界面不做自适应分屏处理,当这个项目运用在不同的dpi屏幕上时就会出现界面混乱的问题-----链接
注意,QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);一定要加在QApplication创建 之前。
可以创建的应用程序类型
基类的选择
QMainWindow基类创建的窗口
QWidget基类创建的窗口
对话框基类窗口
如何自动创建UI文件
什么是ui文件
用户界面文件 user interface
在中国文件里进行图形设置编程。
在生成的窗口中生成一个ui指针,这个是做什么的
explicit关键字的作用
抑制了隐式转换,也就是不能使用“=”给类赋值,在这里就是为了防止对基类的初始化发送在派生类的构造函数内部,explicit关键字就要求派生类对基类的初始化必须在初始化列表中进行。
看它的类型,不就是本界面的一个指针对象吗
在main文件中创建一个mainwindow界面,mainwindow中有一个mainwindow的指针,然后再通过ui对象的setupUi函数把当前对象赋给ui指针,这样,就可以通过ui指针使用当前对象的属性进行设置了。
QT creator编译和调试工具
qt中的类模块
比如gui模块,sql数据库模块
文件关联
使用到特定的模块的时候怎么将指定的模块加入到本项目中
项目文件.pro
加入类模块![](https://i-blog.csdnimg.cn/blog_migrate/5ee4523978907bf398d6fa4eab5df6f8.png)
图形化界面文件.ui
.ui文件中设计的ui界面是怎么和其他文件建立连接关系的----ui_X.h文件
刚建立项目时没有这个文件,编译运行之后会自动生成,才可以打开
这里的X和窗口文件的文件名相同,这里是widget
这个文件在编译之后会生成GUI图形界面对应的代码
Ui::Widget
widget.h中的Ui::widget只有声明
ui_widget.h中的Ui::widget完成定义
有些资料会说这两个不同文件里的ui::widget是两个不同的类,但是实际上是同一个类,只是在widget中先声明使用,在ui_widget.h中进行定义而已,如果不是这样,那第一个Ui::widget没有定义,怎么给定义的ui指针分配内存呢
利用完成定义的Ui::widget给ui创建对象
ui控制着两部分内容
1,通过图形化界面转换的ui_widget.h中的代码;
2,通过setupUi()传递本窗口对象,让ui实现对这个对象的控制。
类对象窗口实现的原理
其实,真正的窗口组件就是自己建立的那个类,这个类窗口通过两部分来实现:
1,自己编代码实现,
2,通过ui->setupUi()将这个类窗口发送给ui_x.h文件,系统通过ui文件将图形化组件以及功能翻译为代码,设置在传递过去的类对象窗口中。
信号和槽
什么是信号和槽
connect(发送对象,信号,接收对象,槽函数),Qt4版本中发送信号和槽函数需要用 SIGNAL() 和 SLOT() 来进行声明。
本质是什么
发送对象
就是发送信号的对象,比如按钮。
信号
就是特定的对象发送的事件,比如按钮发送的clicked(),本质上是一个函数。
接收对象
就是接受信号,并执行相应槽函数的对象,比如窗口。
槽函数
信号和槽的规则
信号连接信号的时候,作为槽函数位置的信号会被触发
如果receiver是this表示什么
表示接受信号的对象是本窗口组件。
如果省略receiver表示什么
connect(ui->pushButton_todayPrice,&QPushButton::clicked,[=](){ ui->stackedWidget->setCurrentIndex(0); });
利用lambda表达式实现槽函数
不需要接收对象,直接执行槽函数
QT4的信号和槽的连接的优缺点--SIGNAL,SLOT
1,可以直接传递函数以及参数,不用函数指针。
2,缺点:编译阶段不会进行参数类型检查,运行阶段才会检测出来报错。
有SIGNAL,必须要有SLOT,也就是这两个宏必须同时使用
ui文件怎么设置信号和槽
1,直接连接
2,转到槽函数
右键转到槽
比如将PushButton转到槽函数,就是选择这个按钮作为发射信号的对象,选择好信号的类型之后就会为中国信号建立一个槽函数。
在UI界面进行的信号和槽的建立不需要自己去连接信号和槽。
自定义信号和槽
信号
槽函数
各种信号的功能和区别
信号 | 翻译 | 功能 | 使用对象 |
clicked() | 点击 | 按钮 | |
clicked(bool) | |||
triggered() | 触发 | 菜单项,工具栏,快捷键 | |
triggered(bool) |
信号有bool和没有bool参数的原因和区别
像按钮,菜单项这些组件checkalbe属性默认都是false,所谓的checkable属性就是触发这些对象的时候,会给信号函数传递一个bool类型的值,表示这个对象的状态,默认都是false,也就是默认组件的状态不可以改变,如果要改变,可以通过setCheckable(true)成员函数改变,改变之后,这个组件传递的状态就会一次true,一次false.
控件的属性
cheakable
有可选和不可选两种状态。
按钮电机会返回true,false两两种状态值
isCheckable和isChecked
isChecked记录按钮是否被选中,选中返回1,取消返回0;
isCheckable记录的是按钮是否可以被选中;
setCheckable
setCheckable()设置按钮是否可选状态
QT怎么打印输出字符串
qt中不能使用cout,要用qDebug()函数
注意:
1,qDebug输出完所有数据之后会自动换行
2,qDebug()每一个“<<”都会输出一个空格
Qt中的字符串
Qt中的字符串对象是QString