Qt基础编程

什么是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高分屏处理

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

分辨率--链接

如果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

 加入类模块

 图形化界面文件.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

本课程详细、全面地介绍了 Qt 开发中的各个技术细节,并且额外赠送在嵌入式端编写Qt程序的技巧。整个课程涵盖知识点非常多,知识模块囊括 Qt-Core 组件、QWidgets、多媒体、网络、绘图、数据库,超过200个 C++ 类的分析和使用,学完之后将拥有 Qt 图形界面开发的非常坚实的功底。 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。注意:本套视频教程包含大量课堂源码,包含对应每个知识点的精心编排的作业。由于CSDN官方规定在课程介绍中不能出现作者的联系方式,因此在这里无法直接给出QQ答疑号,视频中的源码、资料和作业文档链接统一在购买后从CSDN平台跟我沟通,我会及时回复跟进。注意:本套视频教程包含全套10套作业题,覆盖所有视频知识点,循序渐进,各个击破,作业总纲如下:下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)…… ……
Qt中使用C绘制函数图像需要用到Qt的绘图类QPainter和绘图设备QPaintDevice,以及C语言的数学库math.h。 以下是一个简单的例子,绘制y = sin(x)的函数图像: ```c++ #include <QPainter> #include <QPaintEvent> #include <QWidget> #include <math.h> class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0) : QWidget(parent) {} protected: void paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); // 抗锯齿 painter.translate(width() / 2, height() / 2); // 将坐标系移动到中心点 // 绘制坐标轴 painter.drawLine(-width() / 2, 0, width() / 2, 0); painter.drawLine(0, -height() / 2, 0, height() / 2); // 绘制函数图像 painter.setPen(Qt::red); painter.setBrush(Qt::NoBrush); QPointF prevPoint; for (int x = -width() / 2; x < width() / 2; x += 1) { double y = sin(x * M_PI / 180.0); // 计算y值 QPointF point(x, -y * 100); // 将y值乘以一个系数,使图像更清晰 if (x == -width() / 2) prevPoint = point; painter.drawLine(prevPoint, point); prevPoint = point; } } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWidget w; w.show(); return a.exec(); } ``` 在paintEvent函数中,首先创建一个QPainter对象,并设置抗锯齿渲染。然后将坐标系移动到窗口中心点,绘制x轴和y轴。接着设置画笔为红色,将画刷设置为无,使用for循环计算并绘制函数图像。由于Qt使用的是角度制而非弧度制,所以在计算y值时需要将x乘以π/180转换为弧度。最后将y值乘以一个系数,使图像更清晰。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值