Qt基础编程

什么是Qt

Qt就是c++的一种跨操作系统平台的可视化开发工具

 qt5.15.2的下载

下载安装链接

安装过程中出现network error while......时的解决办法

创建项目

application是什么

application应用程序

Qt基础编程_第1张图片

Qt基础编程_第2张图片

Qt基础编程_第3张图片

作用

QApplication---界面应用入口

也就是 只要是要建立界面的QT项目都需要QApplication应用程序。

链接

exec()进入时间循环和消息处理

函数

QApplication a(argc, argv); 

argc和argv是命令行传进去的参数。比如linux里输入一个命令
cp file.c file1.c
那么argc=3 argv就是上面那行字符串数组。
因为图形编程有时也需要从命令行传递参数给程序,所以才会有argc和argv。

QT命令行参数

QT高分屏处理

高分屏---高分辨率屏幕

分辨率--链接

如果QT界面不做自适应分屏处理,当这个项目运用在不同的dpi屏幕上时就会出现界面混乱的问题-----链接

注意,QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);一定要加在QApplication创建 之前。

 可以创建的应用程序类型

Qt基础编程_第4张图片

基类的选择

Qt基础编程_第5张图片

三种窗口区别链接

QMainWindow基类创建的窗口

Qt基础编程_第6张图片

QWidget基类创建的窗口

Qt基础编程_第7张图片

 对话框基类窗口

Qt基础编程_第8张图片

 如何自动创建UI文件

Qt基础编程_第9张图片

什么是ui文件

用户界面文件  user interface

在中国文件里进行图形设置编程。

在生成的窗口中生成一个ui指针,这个是做什么的

Qt基础编程_第10张图片

 explicit关键字的作用

抑制了隐式转换,也就是不能使用“=”给类赋值,在这里就是为了防止对基类的初始化发送在派生类的构造函数内部,explicit关键字就要求派生类对基类的初始化必须在初始化列表中进行。

Qt基础编程_第11张图片

看它的类型,不就是本界面的一个指针对象吗

在main文件中创建一个mainwindow界面,mainwindow中有一个mainwindow的指针,然后再通过ui对象的setupUi函数把当前对象赋给ui指针,这样,就可以通过ui指针使用当前对象的属性进行设置了。

QT creator编译和调试工具

Qt基础编程_第12张图片

qt中的类模块

比如gui模块,sql数据库模块

文件关联

使用到特定的模块的时候怎么将指定的模块加入到本项目中

项目文件.pro

 加入类模块Qt基础编程_第13张图片

 图形化界面文件.ui

.ui文件中设计的ui界面是怎么和其他文件建立连接关系的----ui_X.h文件

刚建立项目时没有这个文件,编译运行之后会自动生成,才可以打开

这里的X和窗口文件的文件名相同,这里是widget

Qt基础编程_第14张图片

 Qt基础编程_第15张图片

这个文件在编译之后会生成GUI图形界面对应的代码

Qt基础编程_第16张图片 Ui::Widget

widget.h中的Ui::widget只有声明

Qt基础编程_第17张图片

ui_widget.h中的Ui::widget完成定义

Qt基础编程_第18张图片

有些资料会说这两个不同文件里的ui::widget是两个不同的类,但是实际上是同一个类,只是在widget中先声明使用,在ui_widget.h中进行定义而已,如果不是这样,那第一个Ui::widget没有定义,怎么给定义的ui指针分配内存呢 

利用完成定义的Ui::widget给ui创建对象

Qt基础编程_第19张图片

ui控制着两部分内容

1,通过图形化界面转换的ui_widget.h中的代码;

2,通过setupUi()传递本窗口对象,让ui实现对这个对象的控制。 

类对象窗口实现的原理

其实,真正的窗口组件就是自己建立的那个类,这个类窗口通过两部分来实现:

1,自己编代码实现,

2,通过ui->setupUi()将这个类窗口发送给ui_x.h文件,系统通过ui文件将图形化组件以及功能翻译为代码,设置在传递过去的类对象窗口中。

信号和槽

什么是信号和槽

connect(发送对象,信号,接收对象,槽函数),Qt4版本中发送信号和槽函数需要用 SIGNAL() 和 SLOT() 来进行声明。

本质是什么

发送对象

就是发送信号的对象,比如按钮。

信号

就是特定的对象发送的事件,比如按钮发送的clicked(),本质上是一个函数。

接收对象

就是接受信号,并执行相应槽函数的对象,比如窗口。

槽函数

 信号和槽的规则

Qt基础编程_第20张图片

Qt基础编程_第21张图片

信号连接信号的时候,作为槽函数位置的信号会被触发

Qt基础编程_第22张图片

如果receiver是this表示什么

表示接受信号的对象是本窗口组件。

如果省略receiver表示什么

connect(ui->pushButton_todayPrice,&QPushButton::clicked,[=](){
    ui->stackedWidget->setCurrentIndex(0);
});

 利用lambda表达式实现槽函数

不需要接收对象,直接执行槽函数

Qt基础编程_第23张图片

QT4的信号和槽的连接的优缺点--SIGNAL,SLOT

1,可以直接传递函数以及参数,不用函数指针。

Qt基础编程_第24张图片

Qt基础编程_第25张图片

 2,缺点:编译阶段不会进行参数类型检查,运行阶段才会检测出来报错。

Qt基础编程_第26张图片

Qt基础编程_第27张图片

有SIGNAL,必须要有SLOT,也就是这两个必须同时使用

Qt基础编程_第28张图片

ui文件怎么设置信号和槽

1,直接连接

Qt基础编程_第29张图片

Qt基础编程_第30张图片

2,转到槽函数

右键转到槽

比如将PushButton转到槽函数,就是选择这个按钮作为发射信号的对象,选择好信号的类型之后就会为中国信号建立一个槽函数。

在UI界面进行的信号和槽的建立不需要自己去连接信号和槽。

自定义信号和槽

信号

Qt基础编程_第31张图片

槽函数

各种信号的功能和区别

信号 翻译 功能 使用对象
clicked() 点击 按钮
clicked(bool)
triggered() 触发 菜单项,工具栏,快捷键
triggered(bool)

信号有bool和没有bool参数的原因和区别

像按钮,菜单项这些组件checkalbe属性默认都是false,所谓的checkable属性就是触发这些对象的时候,会给信号函数传递一个bool类型的值,表示这个对象的状态,默认都是false,也就是默认组件的状态不可以改变,如果要改变,可以通过setCheckable(true)成员函数改变,改变之后,这个组件传递的状态就会一次true,一次false.

Qt基础编程_第32张图片

控件的属性

cheakable

有可选和不可选两种状态。

按钮电机会返回true,false两两种状态值

 isCheckable和isChecked

isChecked记录按钮是否被选中,选中返回1,取消返回0;

isCheckable记录的是按钮是否可以被选中;

setCheckable

setCheckable()设置按钮是否可选状态

QT怎么打印输出字符串

qt中不能使用cout,要用qDebug()函数

注意:

1,qDebug输出完所有数据之后会自动换行

2,qDebug()每一个“<<”都会输出一个空格

Qt中的字符串

Qt中的字符串对象是QString

你可能感兴趣的:(qt)