- 博客(52)
- 资源 (3)
- 收藏
- 关注
原创 【C++】运算符重载的示例实现和应用
如上,想要比较两个对象里面的内容,demo1!= demo2 ,有两种运算符重载的方式,一种是作为成员函数,一种是作为全局函数的方式。如果在实际应用中需要比较这两个对象的内容,而且使用的场景比较多,或者想要代码看起来更易懂和简洁,就可以用到运算符重载。函数声明: bool operator!//这样在其他地方就可以直接使用!=符号来进行比较,不用再去单独列出每个成员变量来进行比较,= 运算符 : operator!作为一个全局函数:(省略函数声明)//可以说是一种很方便的使用。
2023-09-06 23:12:54
531
原创 【QML】使用 QtQuick2的ListView创建一个列表(一)
效果还是和上面一样,因为并没有对委托delegate做修改,修改组件的显示效果也主要是对委托做修改,delegate这个属性代表ListView每一行的显示风格,可以通过自定义各种委托组件来实现各种样式的列表的效果。首先,要知道ListView提供了那些属性提供修改,那些是只读,各个属性的类型是啥,这些可用在QT的帮助文档和开发过程中使用F1键来使用帮助文档查看,都是很方便的,还有用例;
2023-09-06 23:08:27
613
原创 【QT】重写QAbstractLIstModel,使用ListView来显示多列数据
可以看到这里显示的是一列的内容,如果要使用ListView来显示多列的内容,应该如何去设计model呢?先创建一个列表的只读模型,以QAbstractListModel为基类,最基础的只用实现两个函数即可:rowCount()和。这就是一个列表显示,根据在c++中提供的数据注册到qml中来显示的,动图这里就不展示了。以上可能还有许多需要完善和修改的地方,后续会跟进修改和优化。接下来在qml中使用ListView组件,并指定使用的model就可以了。现在来开始实现这两个函数:这两个函数的实现是比较简单的。
2023-08-21 23:20:06
3049
原创 【QML】qml中查看组件创建或执行操作耗时的方法
在QML提供了一个打印,可以打印出一段代码所使用的时间,打印时间是以毫秒级别的。可以使用该方法来判断一个组件或界面加载所要用到的时间,根据时间效果来进行优化;
2023-04-05 10:22:40
421
原创 【QT】使用QML构建一个简易的计算器界面(三)
前面两篇对计算器界面的布局和显示以及实现功能做了相关优化,但是对输入显示那一块还没有具体的处理步骤,包括对输入表达式的合法性检查,显示框的多行历史显示等功能还需要添加,接下来将从这几个方面对这些功能进行添加。
2023-03-05 22:48:35
784
原创 【Eclipse】导入项目到新文件夹的步骤
这样项目就被导入到新文件夹中了,不用去新建一个项目再添加库文件了。2、在弹出的框里面点击import,然后打开。3、选中后点击next。
2023-02-28 19:09:03
7371
原创 【QT】使用QML构建一个简易的计算器界面(二)
使用GridView先规划好各个的大小和每一排放置的按钮数,对于GridView的使用方法这里不做过多说明,可以看QT提供的例子来学习,为了避免在使用过程中对生存的程序进行拉伸来打乱了布局,对窗口的大小进行了写死,用户不能自行缩放窗口,具体完成代码如下:(没有贴c++部分的代码,c++部分的代码和上一篇文章一样,没做改动)对一些按钮的布局做了些改动,设置了按钮按下放大的效果,看上去比上一篇的界面有了明显的美化,但是在功能方面依旧没有拓展,同时对一些非法表达式组合还没有添加判断,留在下一篇来改进,先这样吧。
2023-02-27 23:26:26
782
原创 【QT】使用QML构建一个简易的计算器界面(一)
先新建一个qt quick项目,运行可以得到一个空白的窗口,根据自己设计的计算器来设计大小和布局按钮,这里就按电脑自带的计算器界面来进行设计和布局,先看电脑的计算器窗口如下:(大概标准按如下设计)使用qml来构建一个界面是非常便捷的,熟悉其中组件的使用,构建一个界面就不是难事。目前只完成了简单的运算,复合运算,负数,小数等还未完成,等后续完成;先进行简单的计算器设计,只包含加减乘除四种运算;首先来看如何快速的创建一个计算器的基础界面;
2023-02-08 23:08:56
1829
1
原创 【C++】运算符重载及重载的简单示例说明
运算符重载和函数重载也可以说是一个概念,只是把用于函数重载的概念用到了运算符上,允许给c++的运算符更多的含义。我们知道的一些运算符其实已经被重载,比如将(*)运算符用于地址,那么得到的是存储在这个地址的值,也就是所说的解地址运算符,但是将用于两个数字之间,得到的是这两个数字的乘积,而c++是通过判断操作数的数目和类型来判断使用运算;这就是一个运算符重载的例子,在日常使用中经常会用到,c++的运算符重载是通过operator(重载运算符)来实现的;operator@() 错误的, @不是一个运算符。
2023-02-07 23:15:18
366
原创 【QT】C++和QML使用多线程优化界面切换卡顿的方法
qt提供了一种声明式语言qml,可以使用一些可视组件以及这些组件之间的交互来描述用户界面,而c++可以只负责后台逻辑的处理,将界面和后台分离开来,由qml来做UI界面,c++负责后端处理,对我个人来说,这样的方式大大的方便了对界面和逻辑的修改和维护;但是还是有问题的存在,就是有的耗时操作再子线程中一直运行,一直在跑,但是界面就一直在切换,如果是需要获取在耗时操作后的结果显示在界面的话,这种方法显然是不行的。
2023-02-05 22:42:44
3493
原创 【QT】QML—— ListView添加固定表头的方法
利用ListView的特性创建一个列表头,显示每一项的具体含义;在qt中构建界面时经常会对多个数据进行排列显示,可以使用qml提供的ListView组件来快速的构建一个列表模型来进行列表内容的分组显示;
2023-01-02 21:52:56
3956
原创 QT运行日志保存和对日志大小进行监控
最近在做qt的时候遇到一个问题,就是将qt程序在设备上运行,时间长或者是一些操作导致qt卡死或者崩溃的时候,无法判断qt问题出在哪里,没有的UI程序的日志进行打印保存,后面定位错误的时候会比较麻烦,于是查找了一个对qt打印进行定向输出到日志文件的方法。在QT中对日志定向输出比较好的方法是使用ofstream的方法,向流输出数据;还有一个问题就是如果加锁和解锁的过频繁可能会带来的问题。......
2022-08-11 23:09:57
1052
原创 ubuntu使用交叉编译工具链编译opencv源码
最近要使用交叉编译工具链编译opencv源码,生成opencv库在qt上使用,记录一下编译过程,防止下次踩坑。个人ubuntu环境编译,不同的环境变量下可能会有不同的问题或报错,仅作参考。第一步:需要准备的工具以及配置好的环境变量ubuntu使用交叉编译工具(gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu)链编译opencv3.4.3源码;(这里可以使用cmake工具来进行编译,图形化界面会方便许多)安装cmake工具 cmake-3.23.0-r
2022-05-22 23:06:00
1693
原创 为什么要memset()? 你memset()了吗
说起memset()函数,相信大多数人都不陌生,在一些项目代码中,随处可见memset()的使用,那为啥memset()在代码中如此受欢迎呢,在一个项目中memset充当着一个怎样的角色呢,先来看一下memset()函数的原型。memset()函数的原型如下:#include <stdio.h>void *memset(void *s, int c, size_t n);memset()函数在程序中一般是用来进行数组初始化的,对申请的内存进行初始化,特别是比较大的数组或者是结构体,在定
2022-01-20 21:16:36
2254
原创 那些用起来很方便的C函数之sscanf()
在C中,提供了许多c函数,在代码中进行一些转换或者是对代码设计进行灵活操作时会非常便利,会节省一些开发时间,不至于在这些基本的事情上去花时间处理,本篇文章所分享的就是一个字符串提取函数ssanf();...
2022-01-19 23:24:22
769
原创 C语言:字符常量的那些坑
有这样一条语句:char *p = “hello”;现在在一些编译器下这样写是不合法的,有些编译器下也是能够运行通过的;首先来看,这个指针,它指向是“hello”,字符串常量存放的地址是一个静态数据区,它的内容是不可以被修改的,也就是说这是一个指针常量,它指向的数据是不可以被修改的;就等价于:const char *p = “hello”;先来看一段代码:int main(){ char *p = "hello"; char *p1 = "hello"; printf("&p=%p
2021-03-03 21:35:53
437
1
原创 数据结构面试题:将一个单链表反向
//将链表翻转int reverse_link(linklist* head) { linklist* p = head->next; linklist* q = NULL; head->next = NULL; while (p != NULL) { q = p; p = p->next; q->next = head->next; //p = p->next; head->next = q; } return 0;}单链
2021-02-25 23:39:00
301
原创 数据结构:单链表的创建和增删查改操作
单链表结构:将线性表的各元素分布存储在不同的存储块,称为结点通过指针或地址建立他们的联系,所得到的存储结构称为链表结构,其中,结点的data域存放数据元素,而next域是一个指针,指向下一个元素所在的结点。创建一个链表/*****创建一个单链表*****///定义结构体typedef int data_t;//方便以后对数据类型的修改typedef struct link_list{ data_t data;//数据域 struct link_list *next;//next域}lin
2021-02-25 23:12:36
297
原创 C语言笔试题:几种字符串的操作函数
大部分公司的笔试题都会涉及到写一个字符串的操作函数,并且不调用库函数。虽然这些函数经常都会用到,但是在笔试现场还真不一定能做对,要保证写出来还要写对还是需要看平时的积累的,毕竟笔试的时候没有机器给你调试,就只有看个人对代码的理解了,所以,多练习是没错的,毕竟机会难得。1.strcpy() 字符串拷贝函数//将src里面的字符串拷贝到destchar *MyStrcpy(char *dest,const char *src){ if(NULL == dest || NULL == src){ r
2021-02-23 23:19:26
281
原创 C语言面试题:内存拷贝函数
最近,准备找工作,当然是每天刷一些笔试题,看看各个知识点,反正也没有固定的复习线路,就根据自己刷到的题做知识的延申和拓展。今天看到了一道这样的题:写一个内存拷贝函数。。。。。。起先看到这道题的时候感觉自己是不是没学过这门课,看到这道题的时候是什么也不知道,知识点也学的太薄弱了,然后就是熟悉的搜题环节,自己不会的就去网上找呗,反正现在的网络上这么多大佬,不看白不看,看了,理解了,能写出来的,就是自己的东西了。那么,什么是内存拷贝函数呢?内存拷贝函数写出来是用来做什么的呢?内存拷贝函数,简而言之,就是
2021-02-22 22:38:13
796
原创 Linux基础网络编程:Linux下UDP网络编程模型
前面写了一篇关于TCP/IP协议的网络编程模型,本来打算UDP这块不去写的,感觉会用的少,但是很扎心的就是,去一家公司笔试和面试的时候,笔试题中有关于这一个知识点的内容,很简单的一道题,但是最近对这一部分的知识点的遗忘,没太在意,就做错了,其他的题也是做的很糟糕。先来借这里总结一下这一次面试的经历吧,那家公司的办公环境是真的舒适,在腾讯大厦,看着很高端,这是我正式面试的第一家公司,面试的岗位是嵌入式开发,公司主要是做路由和家庭网络,智能家居配套的这一块的,第一次走进这家公司,我是忐忑的,我幻想着自己一会在
2021-02-21 22:03:20
187
原创 Linux基础网络编程:TCP服务器与客户端的通信
前面这篇文章已经实现了:Linux环境下TCP服务器和客户端的搭建接下来需要完成客户端与服务器的相互通信。在上文中,是通过read/write来实现读取数据和发送数据的,要同时实现收与发,是否将read ,write都加在客户端和服务器就可以了呢?来先看一下:server.cchar buf[1024]; memset(buf,0,sizeof(buf)); while(1){ //memset(buf,0,sizeof(buf)); ret = read(connfd,buf,si
2021-02-05 21:33:18
607
2
原创 Linux基础网络编程:Linux环境下TCP服务器与客户端的搭建
在Linux下创建一个tcp服务器,有以下六个步骤:socket – 创建套接字bind – 绑定主机和端口listen --设置监听套接字accept – 接收客户端连接,并生成新的套接字read/write – 收发数据close – 关闭套接字简单介绍一下这几个函数:1.socket:创建套接字#include <sys/types.h> /* See NOTES */#include <sys/socket.h> int
2021-02-04 22:20:14
3519
1
原创 QT的基本使用(一):计算器界面的简易设计及其简单功能实现
刚开始学习QT,发现QT真的是一个功能很强大的开发软件,所以用QT做了一个简单的计算器来熟悉一下QT。1.首先,先建立一个QT项目的工程文件:如下项目保存位置和项目文件名字自己选择,最好是每个项目单独一个文件夹,便于保存和分享。上面显示的是在安装QT时自己选者安装的环境,有很多,看自己的需求,对号入座就行。基类选择QWidget或者QMainWidget都可以,如果需要用QT的ui布局设置窗口就需要勾选创建界面,如果需要纯代码创建界面就不用勾选(两者最好不要 一起用)。点击完成即可。
2021-01-31 22:12:34
14039
5
原创 C语言学习:结构体的创建和使用
结构体,是C语言学习过程中非常重要的一个部分,特别是在后面学习数据结构的过程中。首先,结构体,简而言之,就是创建一个模块,这个模块里面包含着需要使用的各种数据类型,将它封装成一个函数类型但又不是一个函数的整体。对于结构体,需要从以下这几个方面来了解:结构体的定义如何对结构体进行初始化,赋值如何访问结构体里面的数据如何判断结构体所占用内存空间的大小结构体的定义:结构体是程序员自行定义和使用的struct mental{ int age; //结构体内用来存储数据的变量 char se
2020-11-11 17:36:27
9827
2
原创 Linux基础学习(一 ):基本的系统指令
要学习linux系统的基本操作,Linux里面的许多指令是必须要掌握的:下面总结了一些linux的常用指令及其功能:在这里插入代码片
2020-11-05 20:42:44
421
原创 认识C语言指针(一)
复杂类型说明:说到指针,就会出现一些复杂类型,如果对这些复杂类型不太了解,在用到指针有时就会比较懵。一个类型里面会有很多运算符,其优先级和运算优先级一样,只需要遵循一个原则:从变量名处起,根据运算符优先级结合,一步一步分析先来看看简单的类型:int p; //这是一个普通的整型变量int *p; //先从p处开始,先于*结合,说明p是一个指针,然后再与int结合,说明 //指针所指向的类型为int型。所以p是返回一个整型数据的指针int p[5]; //先从p出开始,先于[]结
2020-11-03 17:18:43
266
原创 C语言——字符的操作
在C语言中,常常会对字符进行各种输入输出等多项操作,在这里总结一下在C语言中对字符的各种操作方法。对字符型数据存储变量的定义:char ch='a'; //单个字符用单引号char str="hello"; //字符串用双引号/*****字符数组*****/char array[30]={'a','b','c'};char str1[30]={"hello world"};/*****单个字符的输入输出*****/char ch;getchar(ch); //从键盘获取输入的字符pu
2020-10-30 22:33:59
592
1
原创 C语言基础复习(一)
词法符号:1、关键字:由系统定义的,我们不能随意改动的 32auto:声明自动变量(一般不使用)double:声明双精度变量或函数;int:声明整型变量或函数struct:声明结构体变量或函数;break:跳出当前循环;if:条件语句的肯定分支else:条件语句的否定分支(与if连用)long:声明长整型的变量或者函数;switch:用于分支语句case:开关分支语句enum:声明枚举类型register:声明寄存器变量 typedef:取别名char:字符extern :
2020-10-20 21:01:52
161
原创 蓝桥杯单片机(三)——动态数码管显示
单片机开发板要实现动态数码管的显示首先是要判断数码管是共阴极还是共阳极,共阴极数码管字段为低电平时,点亮;共阳极数码管字段为高电平时,点亮。本开发板所使用的数码管是共阴极数码管。共有八个数码管,八个数码管采用2个74HC573锁存器对单片机P0口的输出信号进行锁存,并增强信号驱动能力进而驱动8个数码管,其中U7的锁存输入Y7C是段选,U8的锁存输入Y6C是位选。每个数码管共有8个字段:dp g f e d c b a, 控制数码管的显示实际上就是控制数码管字段的高低电平显示,通过控制字段的发光来表示字
2020-07-17 13:32:11
4874
1
原创 单片机:延时函数的理解
在实现单片机功能的时候,经常会用到延时函数,那么延时函数的原理也是非常有必要了解的。一般我们写延时函数的时候,默认的晶振频率fosc=12MHZ,而机器周期T=12/fosc=1us。这里我们来写一个10ms的延时函数:void delay_10ms(){ unsigned char i,j,k; for()}...
2020-07-15 09:59:17
14134
4
原创 蓝桥杯单片机(二)——LED流水灯
前面简单的介绍了如何关闭外设,现在就该简单的实现开发板的功能了,实现开发板LED 流水灯的功能。LED模块主要是通过Y4C这个锁存器来控制的,要想要对这个功能进行操作,首先要打开锁存器,然后再进行电平数据的读入。#include "STC15F2K60S2.h"#include "intrins.h"typedef unsigned int u16;typedef unsigned char u8;//关闭外设void Cls_P(){ P2 = P2 & 0x1f | 0xa0
2020-07-15 09:37:58
1319
原创 蓝桥杯单片机(一)——关闭外设及熄灭LED
最近开始准备九月份的蓝桥杯单片机比赛, 买了一块开发板开始进行学习。以前有学过51单片机,相比于CT107D单片机竞赛板V20,51单片机的操作的确要简单许多,但原理都一样,没什么变化,以前学51的时候没怎么做笔记,现在想找一下以前的学习笔记根本没有,于是现在学了之后就把笔记发在博客上,顺便加上一些自己的学习心得,方便自己以后查找,如有错误,欢迎指正。在创建项目的时候,我选择的芯片是STC15F2K60S2, 当然也可以选择AT89C51或AT89C52,当我们的开发板通电打开的时候,蜂鸣器和LED都是默
2020-07-13 18:56:55
4721
2
原创 Python实践——利用pygame创建一个游戏界面(三)
前面留下的两个问题,因为游戏界面设置的比较小的原因,火箭在移动时就会显得比较快,一下就移出了界面,下面需要改进的就是火箭的速度与屏幕边缘的设置,火箭到了屏幕边缘就不再移动。火箭的设置需要在settings类里添加,这里添加一个火箭速度的属性:self.ship_speed = 0.5...
2020-04-28 20:25:58
1415
原创 Python实践——利用pygame构建一个游戏初始界面(二)
前面写到用pygame创建一个窗口并将一张位图(.bmp)放在其中央,接下来将要实现位图的上下左右移动,这里为了更好的效果,把游戏窗口屏幕界面做了一些调整,图片也换成了一张火箭的图片,代码也做了一些细微的调整,如下:main_game.pymain_game.py主要用于管理游戏进程,初始化游戏,通过调用各个关于游戏的类来开启游戏主循环。import pygameimport sys...
2020-04-25 22:19:19
2751
LM2596-ADJ可调降压模块
2020-03-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人