![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
黑马Qt笔记
文章平均质量分 78
Mango酱
这个作者很懒,什么都没留下…
展开
-
61黑马QT笔记之可视化操作数据库(第一部完结)
61黑马QT笔记之可视化操作数据库(第一部完结)前提:之前我们在样式表那里说到了ui提供的各种样式,但是没有说明Item-View;他就是可视化操作数据库重要的样式,也叫Model-View。他是怎么操作的呢?下面我将介绍。1 Model-View是如何从数据库取数据可视化处理的?我们将这个单词拆开来理解。1)Model:代表将数据库的数据加载进来;2)View:将Model的数据在在ui上面显示。2 代码#include "widget.h"#include "ui_widget.h"#i原创 2020-07-22 18:45:47 · 460 阅读 · 0 评论 -
60黑马QT笔记之SQLite
60黑马QT笔记之SQLite1 与MYSQL的区别1)SQLite是本地数据库,不需要和MYSQL一样需要连接;2)插入时不支持自动增长,所以主键例如id,在输入时需要自己去控制;3)使用时需要先提前建好后缀为xxx.db的文本文件。2 代码逻辑 //打印Qt支持的数据库驱动 qDebug() << QSqlDatabase::drivers(); // 1 添加Sqlite数据库 QSqlDatabase db = QSqlDatabase::a原创 2020-07-22 17:40:02 · 173 阅读 · 0 评论 -
59黑马QT笔记之数据库的语句执行--遍历(Qt的遍历)
59黑马QT笔记之数据库的语句执行–遍历(Qt下如何遍历)1 Qt下遍历”数据库语句"执行后的内容的思想1)先执行SQL语句,选择要遍历的内容;2)遍历;2 代码 //数据遍历 QSqlQuery query1; query1.exec("select * from student;"); // 选择要遍历的内容,放在query1对象中 while(query1.next()) // query1.next()代表将内容一行一行的遍历 { // 打印每一行对应原创 2020-07-22 12:47:10 · 1117 阅读 · 0 评论 -
58黑马QT笔记之数据库的语句执行--删除
58黑马QT笔记之数据库的语句执行–删除前提:这里会涉及到数据库的事务概念,具体概念可以看上一篇,事务的回滚其实就是再问你一篇要不要删除。此外,删除的例子只是用delete语句简单模拟删除一条,当然你也可以用drop或者其他来进行删除。1 直接看代码:// 删除键void Widget::on_buttondel_clicked(){ QString str=ui->lineEdit->text(); QString str1=QString("delete from原创 2020-07-22 12:21:06 · 554 阅读 · 0 评论 -
57黑马QT笔记之数据库的语句执行--插入(包括SQL语句的增删改查和复制表结构)
57黑马QT笔记之数据库的语句执行–插入前提:前一篇我们说到如何在Qt下连接数据库,当我们使用添加某个数据库函数时,他可以有第二个参数,例如QSqlDatabase mySql = QSqlDatabase::addDatabase("MYSQL","aa");QSqQuery query(mySql);//第二条语句的SQL语句必须加上参数mySql.否则SQL语句无法执行//但一般只用一个数据时,你没必要使用;或者说你使用多个时也没必要使用,只要你更改相应的数据库,然后执行相应的语句就行。原创 2020-07-21 23:12:10 · 823 阅读 · 3 评论 -
56黑马QT笔记之连接数据库
56黑马QT笔记之连接数据库前提:Qt下操作数据库都需要添加 “QT+= sql” 模块。类似于"CONFIG+=C++11", “QT+=newwork”。C++11需要大写,其它小写,否则编译出错。1 打印Qt下支持的数据库(驱动):#include<QSqlDatabase> // 头文件qDebug()<<QSqlDatabase::drivers();1)QSQLITE:开源,容量较小,静态数据库,多用于嵌入式开发。后缀为.db。2)其他的还有QMYSQL原创 2020-07-05 17:36:37 · 271 阅读 · 0 评论 -
55黑马QT笔记之关闭子线程
55黑马QT笔记之关闭子线程1这里为什么要单独写多一篇文章来说线程的关闭呢?主要是想让大家提升印象,养成资源回收的好习惯,任何时候都要想起开辟过的内存回收。这里的关闭子线程上一篇也写到了,就是利用关闭窗口时调用槽函数回收掉。2 具体步骤不难,如下:1)退出线程;2)回收子线程;3)释放子线程对象内存。(与Linux下的C不太一样.) //退出子线程 thread->quit(); //回收资源 thread->wait(); delete myT;原创 2020-07-05 15:30:51 · 1431 阅读 · 7 评论 -
54黑马QT笔记之使用Qt5版本进行线程画图
54黑马QT笔记之使用Qt5版本进行线程画图1 线程绘图例子这里我们使用Qt5版本进行线程绘图,该例子不算难,步骤就是上一篇文章的步骤。这里只需要注意一下,当我们从子线程处理完数据后,通过信号传参将画好的数据image传出来,赋值给主线程的image(两者不一样),然后当主线程要在窗口绘图时,必须重写绘图事件。2 代码1)自定义类头文件:#ifndef MYTHREAD_H#define MYTHREAD_H#include <QObject>#include <QIma原创 2020-06-21 18:18:40 · 571 阅读 · 8 评论 -
53黑马QT笔记之Qt下创建新线程之Qt5版本
53黑马QT笔记之Qt下创建新线程之Qt5版本1 创建新线程步骤:1)自定义一个类,必须继承于QOject,但函数名可以是任意,不一定为run。2)创建自定义类对象myT。 不能指定父对象this,因为后面要将该对象移动到QThraead对象。3)创建QThread类对象thread。 这两个类对象一般作为主线程的成员。4)将自定义类对象移动到子线程中,自定义类就相当于一个子线程。 myT.movetoThread(thread);5)启动子线程。 thread.start(); 但与Qt4版本原创 2020-06-21 17:31:24 · 441 阅读 · 0 评论 -
52黑马QT笔记之Qt下创建新线程之Qt4版本
52黑马QT笔记之Qt下创建新线程之Qt4版本前提:这个版本是Qt4.7之前创建新线程的方法。1 创建新线程步骤:1)自定义一个类,必须继承于QThread,且线程函数必须为run。2)启动线程必须是thread.start()间接启动;不能直接调用run方法启动线程。thread为自定义类的对象,一般放在主线程作为其成员变量。2 用该方法解决上一篇单线程执行多任务卡顿问题:1)自定义类头文件:#ifndef MYTHREAD_H#define MYTHREAD_H#include &l原创 2020-06-21 16:25:46 · 194 阅读 · 0 评论 -
51黑马QT笔记之为什么需要使用线程
51黑马QT笔记之为什么需要使用线程原创 2020-06-21 11:58:58 · 343 阅读 · 0 评论 -
49黑马QT笔记之利用TCP传输文件
49黑马QT笔记之利用TCP传输文件前提:黑马视频的代码第二次不能传输的原因是因为:客户端在第一次传输完成后,isStart=false。即第二次无法接收文件信息并打开文件,所以他会出现"write:device not open"。我们在文件接收完毕后,即文件相等那里重置isStart=true即可。1 服务端流程:1) 正常连接通信。2) 选择文件按钮,弹出对话框选择文件,在该槽函数...原创 2020-05-08 16:27:52 · 609 阅读 · 0 评论 -
48黑马QT笔记之QTimer以及QTimer与QTime的区别
48黑马QT笔记之QTimer以及QTimer与QTime的区别1 QTimer(定时器):1)使用QTimer的思想:定义一个定时器QTimer Timer,一般利用按钮开启定时器,代码为Timer.start(1000);开启后每1000毫秒触发一次timeout信号,这样我们就可以在想要的时间做某些事情。关闭时也一般用按钮关闭,代码为Timer.stop()。2 定时器QTimer的...原创 2020-05-07 21:23:59 · 2472 阅读 · 0 评论 -
47黑马QT笔记之Qt下Udp通信过程例子及实现广播与组播
47黑马QT笔记之Qt下Udp通信过程例子及实现广播与组播原创 2020-05-07 17:34:48 · 1145 阅读 · 1 评论 -
46黑马QT笔记之Qt下Tcp通信过程例子
46黑马QT笔记之Qt下Tcp通信过程例子1 服务端:1)头文件:#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include<QTcpServer>#include<QTcpSocket>namespace Ui {class Widget;}class Widget : pu...原创 2020-05-07 13:15:57 · 220 阅读 · 0 评论 -
45黑马QT笔记之Qt下的Udp的广播和组播
45黑马QT笔记之Udp下的广播和组播1 广播: 在使用QUdpSocket类的writeDatagram()函数发送数据的时候,其中第二个参数host应该指定为广播地址:QHostAddress::Broadcast此设置相当于QHostAddress(“255.255.255.255”)。255.255.255.255在所有网段都属于广播地址。即在UDP的例子中,我们在输入对方ip时输入...原创 2020-05-07 13:09:09 · 1344 阅读 · 0 评论 -
44黑马QT笔记之IP地址的划分与是否在同一网段
44黑马QT笔记之Udp的广播和组播1 IP地址的划分:每个IP地址包括两个标识码(ID),即网络ID和主机ID。IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。1)A类地址:一个A类IP地址由1字节的网络地址和3字节主机地址组成,它主要为大型网络而设计的,网络地址的最高位必须是“0”, 所以ip地址范围从0.0.0.0 到127.255.255....原创 2020-05-06 21:28:15 · 1282 阅读 · 0 评论 -
43黑马QT笔记之Qt下Tcp/Udp通信过程
43黑马QT笔记之Qt下Tcp/Udp通信过程前提:Qt下的网络通信需要加上 QT+=newwork 模块。1 Qt下Tcp的通信过程:1)共有三个套接字。客户端有一个QTcpServer监听套接字;服务端有两个,分别是QTcpServer监听套接字和QTcpSocket通信套接字,后者一般需要在连接成功时,通过前者用nextPendingConnection()取出。2)newConne...原创 2020-05-06 12:16:36 · 707 阅读 · 1 评论 -
42黑马QT笔记之Linux下Tcp/Udp通信过程
42黑马QT笔记之Linux下Tcp/Udp通信过程1 Linux下Tcp通信过程:1)第一次握手:执行connect()。2)第二次握手:accept()返回。3)第三次握手:connect()返回。4)共有三个套接字,客户端1个fd。服务端一个监听套接字fd,一个通信套接字confd。2 Linux下Udp通信过程:1)Udp是面向无连接的,所以不需要connect和accep...原创 2020-05-06 10:12:45 · 548 阅读 · 0 评论 -
41黑马QT笔记之QFile、QDataStream、QTextStream、QBuffer读写文件的总结
41黑马QT笔记之QFile、QDataStream、QTextStream、QBuffer读写文件的总结1 总结QFile、QDataStream、QTextStream、QBuffer:1)只要会操作QFile和QBuffer的读写,就会中间那两个。中间那两个只是在QFile和QBuffer的基础上再转化为流操作而已。当然你不转流操作也可以。2 )QBuffer与QFile操作基本一样,...原创 2020-05-01 09:41:22 · 877 阅读 · 0 评论 -
40黑马QT笔记之QBuffer缓冲区文件读写
40黑马QT笔记之QFile、QDataStream、QTextStream读写文件的总结1 总结QFile、QDataStream、QTextStream:只要会操作QFile读写的,就会后面两个。后面两个只是在QFile的基础上再转化为流操作而已。...原创 2020-04-30 20:30:28 · 2898 阅读 · 0 评论 -
39黑马QT笔记之QTextStream读写文件(带有两个全局宏)
39黑马QT笔记之QTextStream读写文件1 QTextStream和QDataStream相比:1)优点:可以在文本写入、读取前,按指定编码方式写入、读取。2)缺点:虽然操作方步骤本一样。但区别是,写进时由于没有空格,第一个str读取时,100会被当成字符串与"我笑了"被str一起读走,导致整型a没有数据,默认赋值为0。所以QTextStream在读取时建议用readAll这种方式读...原创 2020-04-30 20:28:35 · 1235 阅读 · 0 评论 -
38黑马QT笔记之QDataStream读写文件
38黑马QT笔记之QDataStream读写文件(带有两个全局宏)1 为啥要用QDataStream:为什么我们前面有了QFile读写文件,还要QDataStream读写文件呢?例如,QFile直接读取某个不是utf8编码的文件(QByteArray array=file.readAll())时,他会显示乱码,因为QFile默认是读取utf8文件才能显示的。所以为了能显示其他编码的文件,Qt...原创 2020-04-30 17:56:52 · 3552 阅读 · 0 评论 -
37黑马QT笔记之QFileInfo提供文件相关信息
37黑马QT笔记之QFileInfo提供文件相关信息1 QFileInfo:这个类提供了许多函数给我们查找文件的信息,例如文件名,文件大小等等,对我们进行某些处理相当有用。例如你要对某个目录操作,需要判断它是否为目录;当你需要传输文件内容,你先要提前知道要发送内容的大小,好让自己要接收多大的内容等等。2 代码: //QFileInfo的例子 --有很多函数 自己看文档 QF...原创 2020-04-30 16:32:53 · 127 阅读 · 0 评论 -
36黑马QT笔记之QString、QByteArray、char*的互相转换
36黑马QT笔记之QString、QByteArray、char*的互相转换1 直接看代码:#if 0 //QString -> QByteArray QString str = "123"; QByteArray array = str.toUtf8(); //中文 //QByteArray -> QString str=QString...原创 2020-04-30 13:48:23 · 194 阅读 · 0 评论 -
35黑马QT笔记之QFile写文件
35黑马QT笔记之QFile写文件1 如何在文本编辑区写内容保存到一个本地文件呢?1)利用文件对话框函数getSaveFileName获取要创建的文件路径,实际上还没真正在电脑创建,只是意味着你要创建的路径。2)将要创建的文件路径与QFile关联。3)打开文件。4)获取文本编辑区的内容,将QString转成QByteArray,利用write写进要创建的文件中。5)关闭文件。2 代码...原创 2020-04-30 13:44:58 · 469 阅读 · 0 评论 -
34黑马QT笔记之QFile读文件
34黑马QT笔记之QFile读文件1 QFile的作用:相当于一个虚拟文件,需要与具体文件关联才能操作,一般配合文件对话框的返回值来使用,即getOpenFileName函数。当然,也可以在创建QFile时关联一个不存在的文件路径,保存后自动创建该文件。2 如何读取一个本地的文件显示到指定控件(一般是文本编辑区)呢?1)利用文件对话框函数getOpenFileName获取路径。2)将选择...原创 2020-04-30 11:37:40 · 485 阅读 · 0 评论 -
33黑马QT笔记之不规则窗口
33黑马QT笔记之不规则窗口1 创建不规则窗口的步骤:1)重写绘图事件,在绘图事件中显示一张图片。2)但是显示图片后仍带有窗口的边框,所以我们需要在窗口的构造函数中去掉边框,并使其类似图片一样,使窗口也透明显示。3)由于边框没了,即右上角的按钮无了,鼠标无法操作图片,所以需要重写鼠标事件,包括鼠标按下和移动事件。4)鼠标按下时:若为右键,我们使它关闭窗口;若为左键,记录其相对于窗口的坐标...原创 2020-04-29 21:29:13 · 203 阅读 · 0 评论 -
32黑马QT笔记之QPixmap和QImage的相互转换
32黑马QT笔记之QPixmap和QImage的相互转换1 QPixmap与QImage的互相转换:1)头文件:void paintEvent(QPaintEvent *);2)实现.cpp文件:void Widget::paintEvent(QPaintEvent *){ QPainter p(this); //QPixmap -> QImage ...原创 2020-04-29 20:38:07 · 483 阅读 · 0 评论 -
31黑马QT笔记之QPixmap、QImage、QPicture功能大总结
31黑马QT笔记之QPixmap、QImage、QPicture功能大总结QPixmap、QImage既可以用于绘图,又可以作绘图设备时保存图片。而QPicture只能用于作绘图设备时保存图片状态,保存前需要用到前两种方法绘图,要显示必须重写绘图事件,将状态图片加载到QPicture,然后在窗口显示。前面三篇及这个总结不一定对,但是在这个阶段肯定能符合对这些例子的理解,能让我们快速了解这三个东...原创 2020-04-29 14:23:30 · 341 阅读 · 0 评论 -
30黑马QT笔记之QPicture保存图片
30黑马QT笔记之QPicture保存图片1 使用QPicture需要注意的事项:1)使用QPicture时,不能使用QPainter p(&pic);指定绘图设备,只能用begin和end这对组合。2)QPicture不能绘图,只能保存图片,且保存前需要用到QPixmap和QImage绘图。3)保存的是状态,需要显示的话,保存后,需要在窗口重写绘图事件,将保存好的二进制文件重新加...原创 2020-04-29 14:16:36 · 1068 阅读 · 0 评论 -
29黑马QT笔记之QImage保存图片
29黑马QT笔记之QImage保存图片1 QPixmap、QImage、QPictrue三种绘图工具之间的区别:上两篇我们讲到QPixmap如何在窗口进行绘图,和保存图片。接下来本篇要讲的是QImage如何保存一张图片,即将已有图片再按自己方式保存。首先我们先提一下三种绘图工具的区别。1)QPixmap:不能对图片修改,主要用于屏幕绘图,因为它在屏幕绘图时自己优化了,不同电脑优化程度不一样,...原创 2020-04-29 11:24:24 · 11356 阅读 · 0 评论 -
28黑马QT笔记之QPixmap保存图片
28黑马QT笔记之QPixmap保存图片1 QPixmap、QImage、QPictrue三种绘图工具之间的区别:上一篇我们讲到QPixmap如何在窗口进行绘图,接下来本篇要讲的是QPixmap如何保存一张图片,即将已有图片再按自己方式保存。首先我们先提一下三种绘图工具的区别。1)QPixmap:不能对图片修改,主要用于屏幕绘图,因为它在屏幕绘图时自己优化了,不同电脑优化程度不一样,与显卡等...原创 2020-04-28 21:31:25 · 10367 阅读 · 0 评论 -
27黑马QT笔记之QPixmap和QBitmap的区别
27黑马QT笔记之QPixmap和QBitmap的区别前提:首先我们先要了解什么是透明和不透明的图片。1)透明是指显示后与背景颜色一样的。2)不透明就是有自己的颜色,与背景颜色不一样。看下图,前者就是透明的,后者是背景是白色的,是不透明的。1 :QBitmap是QPixmap的一个子类,QPixmap可以彩色绘图,而QBitmap只能绘出黑白两种颜色。2 代码:重写绘图事件。...原创 2020-04-28 15:10:51 · 334 阅读 · 0 评论 -
26黑马QT笔记之update手动调用绘图事件更新窗口
26黑马QT笔记之update手动调用绘图事件1 update函数的作用:调用时,相当于手动调用绘图事件。2 例子,通过按下按钮,触发按钮的槽函数来调用update,从而调用绘图事件绘图。1)头文件:#ifndef MYWIDGET_H#define MYWIDGET_H#include <QWidget>namespace Ui {class MyWidget;...原创 2020-04-28 14:03:17 · 2831 阅读 · 1 评论 -
25黑马QT笔记之简单绘图(包括画线(用到画笔)、画矩形、画圆(用到画刷填充))
25黑马QT笔记之简单绘图(包括画线(用到画笔)、画矩形、画圆(用到画刷填充))前提:以下内容均是在上一篇的基础下测试的,都是在窗口中绘图,所以也是在窗口的绘图事件中实现。1 画线(用到画笔): //2 画线时可以提前利用画笔将线变粗 步骤:画笔->设置线宽->画家设置画笔 QPen pen; pen.setWidth(10); //3 也...原创 2020-04-28 12:56:04 · 994 阅读 · 0 评论 -
24黑马QT笔记之画背景图
24黑马QT笔记之画背景图1在窗口中绘图必须重写绘图事件,在绘图事件中绘图。即用到QPainter画家和xxx.begin(this)函数指定绘图设备。与之前学的区别,下面的代码是在标签中显示图片,只是简单的显示一张图片,且在标签而并非在窗口显示。虽然最终标签还是挂在窗口显示,因为标签指定窗口为父对象嘛,但是图片并非是在窗口绘图的,是在标签。 //1 显示某张资源图片 ui-...原创 2020-04-28 10:44:53 · 246 阅读 · 0 评论 -
23黑马QT笔记之猜数字游戏答案
23黑马QT笔记之猜数字游戏答案代码在自己写的day04的第一个项目。想要代码的可以私信我。原创 2020-04-27 21:28:40 · 987 阅读 · 6 评论 -
22黑马QT笔记之事件全总结
22黑马QT笔记之事件全总结1 每个控件重写过滤器、event函数、各个事件处理函数都一样,都是先类中声明,类外定义。2 每个控件都可以重写事件过滤器(但是他一般写在窗口,安装时参数要求继承QObject嘛)、event函数和各个事件处理函数。只不过有些事件是无法触发,例如标签只用于显示无法再触发键盘按下事件。...原创 2020-04-27 14:54:49 · 176 阅读 · 0 评论 -
21黑马QT笔记之事件过滤器eventFilter函数
21黑马QT笔记之事件过滤器eventFilter函数1 事件过滤器:有时候,对象需要查看、甚至要拦截发送到另外对象的事件。例如,对话框可能想要拦截按键事件,不让别的组件接收到;或者要修改回车键的默认处理。通过前面的章节,我们已经知道,Qt 创建了QEvent事件对象之后,会调用QObject的event()函数处理事件的分发。显然,我们可以在event()函数中实现拦截的操作。由于even...原创 2020-04-27 14:46:36 · 1541 阅读 · 0 评论