- 博客(99)
- 收藏
- 关注
原创 Debian x86 环境配置arm32的交叉编译环境
安装完成之后使用 arm-linux-gnueabihf-g++ 编译源码文件 如果编译提示lpthread 或者lpcap 的库文件找不到,需要查找arm-linux-gnueabihf对应的lib,然后添加对应的lib路径 (-Lpath),我的路径是/usr/lib/arm-linux-gnueabihf/不可以使用ldd 因为编译生成的可执行文件是在其他硬件架构下的,本机对应的ldd 不起作用。arm-linux-gnueabi-readelf -d a.out 查看依赖的库。
2024-08-09 16:21:10 362
原创 QTreeWidget 和QTreeView
QTreeWidget 类是qt 提供的可以直接使用的类,限制比较多,如果需要个性化的显示可以使用QTreeView,QTreeView的拓展性比QTreeWidget 要强,两个类着重点也不一样。QTreeView 着重通过QModelIndex, 具体的操作的item 可以通过强制类型转化将QModelIndex 中的保存的item 的指针转化为需要的类型。QTreeWidget 着重在QTreeWidgetItem,发出的信号都是通过传递QTreeWidgetItem类操作,
2024-07-29 15:04:58 148
原创 qt 中利用qthread 实现在非gui线程处理业务的方法
(也就是说调用exit() 或者quit() 函数qthread 会做一个记录,该线程需要退出,但是是否执行需要开启事件循环,也就是qthread 调用exec(),否则永远不执行.terminate() 也可以终止,但是该函数属于破坏式终止,后果未知)1.继承qthread 函数重新写run函数(只用run函数执行或者调用的代码在新的线程中执行,其余代码还是在创建新线程的 旧线程中执行,槽函数也只在创建该线程的线程中执行)2.如果想让槽函数在新的线程中执行需要,重写继承qobject 的类。
2024-07-03 10:52:03 388
原创 工程中使用lssh2库编译程序遇到无法找打到libssh2_config.h
可以使用locate libssh2_config.h 定位 头文件,但是前提保证数据库是最新的,使用updatedb 更新一下。下载libssh2 源码解压 tar zxvf ,进入解压生成的文件夹找到os400 ,头文件在该目录下。
2024-06-17 14:34:34 144
原创 makefile中连接使用-lssh2 连接命令提示找不到lssh2 解决
如果有错误 查看config.log 编译日志 ,我在编译示提示-V 和-version unrecognized ,然后修改configure 中的关于-V 和-version 直接删除,然后执行成功。apt-get install libssh2-1-dev // 默认安装与操作系统一直的位数,操作系统64 就是64 否在安装32位。nm -D /usr/local/lib64/libssl.so // 查找动态库中的所有符号。以上的操作,编译生成的是64位的动态库,如果是32 位需要重新编译。
2024-06-17 11:55:02 513
原创 编译遇到找不到pcap.so 问题
说明程序中编译的目标程序需要的库与现有的不兼容,一般都是32位和64位的冲突导致。查看makefile 中的编译命令-m32 说明需要32连接32位的库。使用软连接将pcap.so 的实际位置连接到编译的lib 目录下。1.locate 定义pcap.so。下载32位libpcap.so。如果存在则打印所有路径。
2024-06-07 15:46:13 227 1
原创 qt 项目提示无法打开QWidget问题(只针对导入其他工程文件)
新建了一个工程 ,将另一个工程中的main.cpp 直接做了替换,但是vs 提示无法打开qt的头文件因为是qt的头文件,提示找不到头文件有点莫名其妙。
2024-06-05 12:03:30 563
原创 【无标题】
qt 拓展了c++ 中的语法,所以使用qt语法编写的文件无法直接通过c++ 编译器 编译,需要通过moc把qt自己的语法做一个转化,生成c++文件,然后和之前的源码一起编译。例如在文件中使用了Q_OBJECT,①如果是在头文件中,moc 系统会生成一个moc_fileName.cpp 文件,其中就是实现了qt 元对象系统定义的一些虚函数.②如果在.cpp 文件中使用,则会生成fileName.moc 文件,但是.moc 文件是不参与编译的(c++ 编译器只识别hpp 和cpp文件),所以需要在该.cpp 文
2024-05-16 10:32:54 641
原创 递归的一点点想法
# 递归的函数的处理时机决定了事情发生的先后顺序,如果需要逆序输出,可以使用递归,就好像是延迟写入,不过可以使用一个栈来代替,既然需要倒序就可以使用栈。本质上一样只是使用递归延迟了数组的添加,利用递归的特点倒序插入数据。
2024-04-26 16:56:49 178
原创 二叉树的三种遍历方式非递归
#套路 二叉树的遍历先序中序后序无非是根节点的处理顺序不同,三种遍历方式都有一个相同的逻辑流程,不管怎么样首先将左子树入栈,遍历无非是处理的时机不一样。栈顶的元素是否处理需要满足条件,出栈入栈的顺序不能简单的和处理根节点的顺序一致,需要记住最近依次处理的结点,## 二叉树的遍历需要把当前根节点和左右子树抽象成只有一个根节点和一个左子树,一个右子树的情况。1. 先序遍历 根节点的处理顺序和进栈的顺序一致,即进栈并且处理根节点。满足条件 1. 栈顶元素的右子树为空 2. 栈顶元素的右子树被处理过。
2024-04-26 15:48:02 223 1
原创 判断二叉树是否是完全二叉树
1.使用队列的方式,通过入队元素的规律来判断,(如果是完全二叉树,使用层次遍历的方法,如果父节点存在,不管左右子树是否存在都入队列,如果遍历栈中的元素遇到第一个空的结点,后续结点应该都是空,如果有非空结点则说明不是完全二叉树)2.使用标记法,如果遇到一个结点存在一个空结点(如果只存在右孩子则一定不是完全二叉树),如果是完全二叉树,后续结点的孩子节点将不存在。只需要记录第一个有空的孩子结点的结点,遇到下一个结点存在孩子,说明不是完全二叉树。
2024-04-25 18:13:14 182
原创 CMake+qt+Visual Studio
3.configure 配置visual studio 工具,选择生成的平台,(点击之后如果有红色在5处出现,再次点击config,直到消失,如果是下方的空白处有红色就需要根据提示修改CMakeLists.txt文件)##在visual studio 项目中添加文件,添加文件设置文件的位置和CMakeLists.txt同一级目录,方便拷贝代码。##使用visual studio 打开cmake 构建目录下的sln 文件,解决 方案资源管理器中有好几个项目选择指定的工程名的项目作为启动项,否在编译会出现。
2024-04-25 11:58:45 634 1
原创 二叉树问题记录
总结: 代码的位置很关键,如果在调试中发现总是重复遍历,那么需要考虑是否是位置不对。如果出栈那么当前元素的左子树是访问过的,不能再使用上面的循环,思路:得到一个结点首先应达到以该节点为根的二叉树的底部,就是说出栈的元素是不可以再次访问左子树的。也就是以下程序,确保达到左边的最底部。#二叉树的中序遍历非递归。
2024-03-31 20:50:38 181
原创 makefile 学习
SRC = $(wildcard *.cpp *.c) # 在工作目录下寻找所有c cpp 文件。如果文件列表中没有匹配的字符串,就会把整个文件列表的值赋值给变量。原型$(patsubst 原模式, 目标模式, 文件列表)// 如果当前目录下有 main.cpp test.cpp。patsubst 函数。
2024-03-15 15:27:15 264
原创 未将对象引用设置到对象实例
qt 项目打开的vs 2010 的项目 配置完成之后可以编译执行,但是新建qt 类提示。环境 vs 2017 qt 5.13.0 qt-vs-addin 2.10。问题 插件的版本太高了使用低版本的,到qt 官网下载。下载qt-vsaddin2.2 安装之后可以。未将对象引用设置到对象实例。
2023-11-08 18:24:23 395
原创 vscode 通过ssh 连接虚拟机vmware(ubuntu)
给ens33 分配一个ip,如果ip addr 显示了ens33 ip(如果没有输入ifconfig ens33 up 开启ens33端口), 查询ip与vs code ssh 配置中的ip 是否相同,如果改变需要更改为当前的ens33的ip地址。输入ip addr 命令之后ens33的ip 没有分配,这是应为ip设置未dhcp 动态分配的方式,需要输入 sudo dhclient。第一次连接需要选择系统,选择linux,初始化连接会有一段时间,连接之后需要输入ubuntu 登录的用户的密码。
2023-10-26 09:59:13 1684
原创 c++ primer 笔记(第九章 顺序容器)
当我们用一个对象来初始化容器时,或将一个对象插入到容器中时,实际上放入到容器中的是对象值的一个拷贝,而不是对象本身,就像我们将一个对象传递给非引用参数一样,容器中的元素与提供值的对象之间没有任何关联,随后对容器中元素的任何改变都不会影响到原始对象,反之亦然。...
2022-03-03 11:28:32 116
原创 使用auto关键字遍历多维数组
需要明确一点c++ 中没有真正意义上的多维数组,多维数组本质上是数组的数组int arr[10][10];// 定义了一个名为arr的数组,该数组含有10个元素,每个数组元素是大小为10 且类型为int的数组。使用auto 遍历二维数组int arr[10][10];size_t cnt = 0;/* 使用引用 row 是 int [10] 类型的引用 如果没使用引用那么 row 的类型为int* */for(auto &row :arr)
2022-02-23 10:21:31 1969
原创 c++primer 学习(第七章 类)
7.1定义抽象数据类型成员函数对类成员变量的访问 是通过 隐式地使用this指向的成员的方式this->membervar;对于我们来说,this形参时隐士定义的。实际上,任何自定义名为this的参数或变量的行为都是非法的。因为this的目的总是指向“这个”对象,所以this是一个常量指针,不允许改变this中保存的地址。std::string isbn() const { return this->bookNo;}这里,const的作用是修改隐式this指针的类型
2022-02-23 09:04:42 312
原创 c++ primer(第六章)
6.1.1 局部对象名字的作用域是程序文本的一部分,名字在其中可见对象的声明周期是程序执行过程中该对象存在的一段时间形参和函数体内部定义的变量统称为局部变量,仅在函数的作用域内可见,同时局部变量还会隐藏在外层作用域中同名变量。 在所有函数体之外定义的对象存在于程序的整个执行过程中,此类对象在程序启动时被创建,直到程序结束才会销毁。局部变量的生命周期依赖于定义的方式。6.1.2 函数声明函数的三要素(返回类型、函数名、形参类型)描述了函数的接口,说明了调用...
2022-02-17 20:43:04 344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人