- 博客(48)
- 收藏
- 关注
原创 QT中的JSON
QJsonObject封装了JSON中的对象,可以存储多个键值对,键为字符串类型,值为QJsonValue类型。JSON对象内部使用键值对的方式来组织,键是字符串类型,值可以为多种类型,也可以为JSON数组或JSON对象。QJsonArray封装了JSON中的数组,数组中元素的类型统一为QJsonValue类型。JSON数组中的元素可以是同一类型,也可以使不同类型,可以嵌套JSON数组或JSON对象。//1,将JSON字符串---二进制格式或字符串格式转换成QJsonDocument对象。
2025-05-03 17:13:57
882
原创 QT中的QSS---界面美化
QSS是Qt中能够针对界面的样式进行设置,如:大小,位置,颜色,背景,间距,字体等与CSS功能一致基本语法选择器属性名:属性值;选择器描述了当前样式针对哪类/个控件生效属性名:属性值是对某些样式进行具体的设置,可以有多个如:创建继承自widget的文件进行实现在ui界面创建一个按钮在widget构造函数通过QSS进行指定控件后,此时的样式就会针对指定的控件生效,也会对指定控件的子控件生效在ui界面再创建一个按钮,直接指定控件类型,而不是控件样式对此类型所有控件生效。
2025-05-02 15:45:01
1325
原创 QT中的网络编程
但是在qt中,上面代码能够处理多个客户端,无需为服务端引入多线程,因为问题的本质原因是在Linux等待客户端连接后,通过死循环来与客户端进行信息传输,若只有一个线程就只能进行一个死循环,而在qt中,无需循环,是通过信号槽来与客户端进行信息传输。创建socket,通过connect,连接socket,readyRead信号,和处理对象,处理函数,当收到请求后触发readyRead信号,调用处理函数。将响应的结果---HTML用QPlainTextEdit---纯文本用来表示,展示原始的html。
2025-04-29 20:41:13
1231
原创 QT中的多线程
因为存在并发访问,如第一个线程刚读取到num,还未进行加加操作,此时第二个线程刚刚完成了++操作,并将结果写入内存,但是第一个线程执行完毕后,将num也写入内存,此时两次加加操作就仅有执行一次的效果。使用方法,通过实例化QThread类,对重写其中的run函数,起到指定入口函数的方式---多态,通过start----调用系统api创建线程,新建线程自动执行run函数。多个线程之间的调度是无序的,通过条件变量实现在满足条件的情况下唤醒线程,在不满足条件的情况下使线程休眠。如果线程尚未启动,它也返回true。
2025-04-28 21:26:53
868
原创 QT中的文件操作
QSaveFile是用于在写文件时,自动的把写的内容先写到临时文件中,不会破坏原有的文件,等写入操作完成后,将旧的文件删除,用新的文件替换旧的文件。创建一个继承自QWidget的文件,在ui界面创建一个按钮,通过点击按钮弹出打开文件对话框,获取文件路径,通过文件路径创建QFileInfo类。但是Qt同样封装了自己的一套文件操作,,在编写Qt程序时,推荐使用Qt自己提供的文件操作,和Qt的容器(如Qstring等)更加适配、通过菜单栏实现文件的打开,保存,通过多行编辑框实现文件的数据的写入和显示。
2025-04-27 20:11:41
1056
原创 QT中的事件及其属性
QTimerEvent类用来描述一个定时器事件。因为鼠标移动事件,随便移动一下鼠标就会产生大量的鼠标移动的事件,当进行事件捕获时,会有大量鼠标移动事件需要处理,容易造成程序卡顿。在pushbutton.h声明要重写的事件处理函数,要想重写父类的函数,需要保证函数名和函数的参数列表与父类的完全一致。创建的子类继承自Qt已有的类,在子类中重写父类的事件处理函数,后续触发事件时,通过多态机制,执行子类重写的处理函数。Qt中的事件是对操作系统提供的事件机制进行封装,Qt中的信号槽就是对事件机制的进一步封装。
2025-04-27 16:23:31
810
原创 QT对话框及其属性
继承自QDialog创建类纯代码方式:在ui界面创建一个PushButton转到PushButton的clicked信号的槽函数进行实现自定义对话框,通过创建文件中的创建C++类实现自定义类名,指定父类创建好后多出一个头文件和cpp文件在头文件中声明Dialog.h,对构造函数进行修改,使其能指定父元素同时在dialog.cpp文件修改构造函数的定义,使其能指定父元素。
2025-04-26 18:58:30
932
原创 QT窗口相关控件及其属性
QAction既可以添加到QMenu,同时也可以添加到QToolBar,当一个QAction同时出现在QMenu和QToolBar时,若在其中一个被删除,不会造成重复释放,释放一个QAction内存后,不会在另一个菜单被释放。不能直接将控件添加到浮动窗口中,而是要先创建一个QWidget,设置一个布局管理器,将要添加的控件,放到布局管理器中,再将QWidget设置到dockWidget中,否则就只能项dockWidget中添加一个控件。但是此时点击菜单项无反应,可以通过triggered---触发来实现。
2025-04-25 19:26:03
827
原创 QT布局管理器及其属性
由于按钮的垂直方向默认是没有拉伸的,所有垂直方向默认是不受拉伸影响的,需要对SizePolicy进行设置,使按钮能够在垂直方向进行拉伸展开,再设置垂直方向拉伸系数。而在ui界面创建layout时,先创建了一个widget,然后在新的widget中添加了一个layout,还是一个widget中只能设置一个layout。在ui界面创建控件时,是通过拖拽控件进行布置,放置位置不准确,并且,控件大小需要手动调整,无法自动适应。按钮的大小,尺寸,位置会自动由布局管理器管理,随窗口编号。
2025-04-25 10:56:36
721
原创 QT容器类控件及其属性
使用TabWidget实现一个带有标签页的控件,可以往其内添加控件,进一步通过标签页进行切换。创建一个标签页,两个按钮,一个按钮创建新的标签页,一个按钮关闭当前标签页。如:创建一个标签页,在两个标签页中都放置一个label,用来展示。在点击选项卡的标签条时触发,参数为被点击的选项卡编号。在双击选项卡的标签条时触发,参数为被点击的选项卡编号。在标签页发生切换时触发,参数为被点击的选项卡编号。在标签页关闭时触发,参数为被关闭的选项卡编号。运行后就能通过不同的标签页展示不同的控件。当前选中的标签页的提示信息。
2025-04-23 17:53:25
396
原创 QT多元素控件及其属性
使用TreeWidget表示一个树形控件,里面的每个元素都是一个QTreeWidgetItem,每个QTreeWidgetItem可用包含多个文本和图标,每个文本/图标为一个列。使用TableWidget表示一个表格控件,一个表格中包含若干行,每一行又包含若干列,表格中的每个单元格都是一个QTableWidgetItem对象。在ui界面创建一个TreeWidget,一个lineEdit作为输入框,用来添加新节点,3个pushButton分别用来实现不同的功能。
2025-04-23 11:18:52
178
原创 QT常见输入类控件及其属性
转到滑动条的valueChanged槽函数,实现将horizentalSlider的值设置为窗口的宽度,将verticalSlider的值设置为窗口的高度。实现各个按键的槽函数,来通过快捷键发出信号,调用槽函数,在槽函数内对滑动条的值进行修改,滑动条值发生修改,发送信号,调用槽函数,修改窗口大小。正则表达式,本质上是一个带有特殊字符的字符串,特殊字符用来表示另一个字符串的特征,借助正则表达式来描述一些具有一定特定的字符串。当QLineEdit中的文本改变时,发出此信号,test是新的文本。
2025-04-20 19:53:19
1005
1
原创 QT常见显示类控件及其属性
通过这个类创建的对象,会产生一个timeout信号,可以通过statrt的方式来开启定时器,并在参数中设定timeout信号的触发周期,结合connect将timeout信号绑定到label的槽函数中,通过结合timeout信号好槽函数来实现lable值每秒减一。但是此时若是对widget窗口进行调整,就会使widget大小改变,而在构造函数中将widget大小设置进label是一次性的,一旦程序运行起来后,窗口发生变化时,label的大小是不会改变的,从而使label中的图片和窗口不嵌合。
2025-04-18 20:27:12
1038
原创 Qt常见按钮类控件属性及其使用
QWidget控件继承关系QPushButton继承自QAbstractButton---抽象类,是其按钮的父类抽象类包含纯虚函数,无法创建对象只能通过子类对纯虚函数进行重写,创建子类的实例QAbstractButton相关属性(被QPushButton继承)
2025-04-17 15:08:53
916
原创 Qt中widget控件的常见属性
控件---Widget内置控件包括按钮,文本框,单选按钮,复选按钮,下拉框等都是控件Qt Designer中显示了内置控件:最早的GUI开发,是没有控件概念,界面上显示的对象全部是通过API“画”出来的随着时代的发展,,才出现越来越多的控件QtDesigner中展示的控件都是默认的样子,可以通过优化手段进行优化,还提供了Qt Designer Studio制作界面Qt中的各种控件都是继承自QWidget类----Qt控件体系中通用的部分可以在Qt Designer中查看其属性。
2025-04-15 16:12:31
752
原创 Qt中的信号与槽及其自定义
槽---slot,就是一个普通的成员函数在cpp文件中进行按钮的定义,插入对象树,设置内容,定义槽函数,在h文件中声明槽函数借助ui界面,Qt Designer进行自定义槽函数拖出一个按钮右键点击按钮,选择转到槽选中clicked点击ok后,直接跳转到槽定义函数无需进行connect链接,而是由Qt Creator直接生成可以正常调用Qt中除了通过connect的方式链接信号和槽,还能函数名来链接信号和槽如: void Widget::on_pushButton_clicked()
2025-04-08 16:57:31
1121
原创 Qt坐标体系,控件坐标的设置
QPushButton的父控件就是QWidget,QWidget没有父元素,就相当于其父元素就是整个显示器桌面。给Qt的某个控件,设置位置,就需要指定坐标,对应这个控件来说,坐标系原点就是相对于父控件的。Qt窗口坐标体系---平面直角坐标系(笛卡尔坐标系)将button控件进行坐标设置,单位是像素。button位置发生变化,可以理解为。同样可以通过move对窗口进行移动。以左上角为0,0坐标原点。
2025-04-06 14:44:06
358
原创 Qt中的多种输出方式,信号与槽的基本使用
在创建按钮时,自动在ui_widget.h----根据widget.ui文件生成的文件中包含一个QPushButton* pushButton成员,与Designer界面中设置的objectName值一致,在ui文件编译时,会生成一个C++头文件,其中会定义一个Ui::XXX的类,该类包含ui界面中的所有控件的成员变量。ui->pushButton是指向ui文件中创建的控件,在Qt Designer中创建一个控件的时候就会为其分配一个objectName属性,值是唯一的,可以进行修改,表示由谁发送信号。
2025-04-06 13:43:31
532
原创 Qt基础:创建项目,认识对象树,了解编码
认识基本代码含义:ui文件的本质为xml文件----描述程序的界面,qmake会调用相关工具依据xml来生成c++代码,从而构建页面工程文件:----类似于makefile上面的文件都是源代码文件,在编译过程中会生成一些中间文件其中ui_wieght.h就是根据xml文件生成的cpp代码。
2025-04-02 14:48:31
894
原创 C++中的引用(取别名)
基本任何场景都可以引用传参谨慎使用引用作为返回值,出了作用域,引用对象不在了,就不能用引用返回,若为静态变量,就可以用引用返回注意临时变量具有常性的特点。
2025-03-27 15:16:18
300
原创 缺省参数(默认参数)和函数重载
缺省参数是声明或定义函数时为函数的参数指定指定一个缺省值,在调用该函数时,若无指定实参则采用该形参的缺省值,否则使用传入的指定实参。//无指定实参,使用缺省值Func(10);//有指定实参,使用指定实参return 0;C++允许同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表不同(参数个数或类型,类型顺序不同)
2025-03-27 14:40:14
309
原创 Mysql连接---语言连接和图形化界面
host是登陆位置,user是创建的mysql用户,passwd是用户对应的密码,db是要访问的数据库,potr是mysql服务器的端口号,unix_socket参数和clientflag设为null和0。可以将MYSQL_RES看作char** 的数组,其中的char**指向的char*指向每一个行数据,有几个char**就有几行,有几个char*就表示有几列(一行有几个数据)。//输出第零列的列名(配和列数进行遍历)因为select后,还需要获取查询到的数据---保存到MYSQL结构体内的结果集。
2025-03-15 15:23:07
1151
原创 MySQL用户管理
grant 权限列表 on 库.表名 to ‘用户名’@’登陆位置’ [identified by ‘密码’];语法:create user ‘用户名’ @ ‘登陆主机/ip’ identified by ‘密码’;create user ‘用户名’@’%’ identified by ‘123456’;set password for ‘用户名’@’主机名’=password(‘新密码’);identified by是可选,若用户存在是修改用户密码,否则是创建用户。也能对表中数据进行修改,插入等操作。
2025-03-15 15:11:10
347
原创 Mysql视图
同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。order by可以用在视图中,但是如果从该视图检索数据select中也含有order by ,那么该视图中的order by 将被覆盖。这张表的内容就是select的查询结果,将其称为视图,便于在高频访问数据时的select简洁化。创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响。在修改原始表中的数据时视图中的数据也会发生修改。可以通过修改视图中的数据来修改原始表中的数据。
2025-03-12 19:56:14
295
原创 Mysql事务
mysql中的事务,事务的提交方式,隔离性,原子性,一致性,持久性,隔离级别,读提交,不可重复读,可重复读,串行化,读未提交,读写并发,undo日志,read view,RR,RC,保存点,自动提交,autocommit,
2025-03-12 19:20:42
1065
原创 Mysql表的约束
student表中的class_id就对应class表中的id,因此在学生表中不会出现不属于class表中没有的id,需要MySQL对此进行约束,并且若在学生表中存在class_id为1的学生,则不能对class表中id为1的班级进行删除。primary key:用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键,但并不意味着一个表中的主键只能添加给一列(一个主键可以被添加到一列或者多列-(复合主键))---主键所在的列通常是整数类型。通常和主键搭配使用,作为逻辑主键。
2025-03-03 16:04:51
785
原创 Mysql数据类型
varchar(L):变长字符串,L表示可插入字符长度,最大长度为65535个字节----实际存储上限与编码有关,utf8中,一个字符3字节,gbk中一个字符2字节,还受用于记录varchar实际中使用字节长度的字符长度影响---一般是1-3个字节---由实际使用字节长度决定。当我们添加枚举值时,也可以添加对应的数字编号。可以插入汉字,一个汉字为一个字符---utf8中一个字符占3字节,当前char类型中的字符与c语言中的字符不同,不论一个汉字/字母都为一个字符,同理,也不能超过可存储长度。
2025-02-27 13:32:46
691
原创 力扣-611.有效三角形个数
2此时,若a+b<c,则若a固定,left到right区间中,b向左不断递减,因为a不变,则这个区间内的b全部不满足在a为此时固定值下a+b<c。若将指向a的left指针向右移动,此时a边要么不变,要么变大,由于剩下两边固定,则一定满足a+b>c,因此,之间将left++,重复第一步,直到left,right相遇时,再移动c边,将其向左移动。因此,当发现a+b>c时,则left到right之间的边全部满足a+b>c。还需判断a+c>b,b+c>a而因为c是最大的一边所以c>=b,c>=a。
2025-02-26 15:01:34
289
原创 Mysql表的操作
---对表中指定一列属性做覆盖修改。---在表中新增一列。在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。对表的操作的sql语句属于DDL-数据定义语言,用来维护存储数据的结构:create,drop,alter。----轻易不要对表进行修改或删除,影响上层使用,需要进行相应修改。
2025-02-25 19:24:33
623
原创 Mysql库的操作
--------从person表中查看name为a的数据------通过数据库的校 验规 则--utf8_gereral_ci进行比较。同时指定编码集,校验规则:create database d4 charset=utf8 collate utf8_gereral_ci;-----区分大小写。如:alter database test2 charset=gbk collate gbk_chinese_ci;-------------------------看历史上创建test2的指令。
2025-02-25 16:39:50
461
原创 力扣算法题-11.盛水最多的容器
输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。此时,height固定,若指针发生移动,因为length不断减小,若heigth不变或变小,则容积一定减小,所以将较小一边的height进行移动。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。同理,记录下此时的容积后,移动较小高度的一边继续寻找,直到两指针相遇。算出所有可能的容积,返回最大值--------会超时。说明:你不能倾斜容器。
2025-02-25 14:58:46
222
原创 力扣算法题-1089.复写零
输入:arr = [1,0,2,3,0,4,5,0]输出:[1,0,0,2,3,0,0,4]解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]cur位置为零时,dest拷贝零,并将dest处前一个位置也拷贝为零,由于有效值---需要进行拷贝的值始终在cur之前,所以不需要担心将非零元素覆盖。若cur指向为零,这将其移动到dest位置后,再将dest后面的位置也设为零----cur++,dest+=2。cur位置为非零时,dest拷贝cur位置的值---cur--,dest--
2025-02-25 13:28:37
352
原创 数据库基础
它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私尸 商用,还是学术研究使用,可以免费使用,修改和分发。-------------------------------------------------mysql本质上是一种网络服务。数据库一般指的是,在磁盘或者在内存中存储的特定结构组织的数据------将来在磁盘上存储的一套数据库方案。
2025-02-25 10:36:09
865
原创 Mysql安装----ubuntu
rpm -qa | grep mysql | xargs yum remove -----将其交给yum进行卸载。systemctl start mysql -------------启动服务端,默认端口号为3306。rpm -qa | grep mysql -----查看mysql的安装包。mysql 后回车 -------启动客户端,输入quit推出mysql。netstat -nltp ---------查看服务器状态。rpm -qa -----查看系统下的所有安装包。
2025-02-25 10:22:09
285
原创 网络通信简单实现进阶---网络群聊
创建一个聊天室,以ip和端口号来标识用户的唯一性,通过哈希表将IP与套接字联系起来。当有服务端收到一个消息,就将其IP地址与表内的数据进行比对,若不在表内,就在服务端发送新用户上线,IP为x.x.x.x。在发送消息时对表内所存储的所有客户端套接字进行发送,实现群聊效果。
2025-01-22 16:10:28
301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人