
c++
文章平均质量分 65
c++语法及Qt使用。
jingbo1801
机器视觉、图像,TX2,python,c++
展开
-
ubuntu20.04运行ORB_SLAM2
安装cmake、git、gcc、g++。原创 2024-10-13 16:56:09 · 1157 阅读 · 0 评论 -
linux设置程序在开机时自启动
对于某些没有使用systemd的Linux发行版,可以在/etc/rc.local文件中添加自启动命令。请确保该文件具有可执行权限。对于使用systemd作为初始化系统的Linux发行版(如:CentOS 7、Ubuntu 16.04及更高版本等),可以通过创建一个systemd服务来实现自启动。首先,打开当前用户的crontab配置文件:crontab -e。可以使用cron的@reboot事件来在系统启动时运行程序。下次系统启动时,指定的程序将自动运行。然后,重启系统以使更改生效。原创 2024-04-15 22:57:36 · 3179 阅读 · 0 评论 -
Qt 路径处理
工作目录是指当前目录,运行目录是指exe所在路径。所以将1.txt放到对应命令行执行得目录就行,当然这肯定不是最终得解决办法,最终得解决办法就是使用“QCoreApplication::applicationDirPath()”,即为exe所在得目录。原创 2023-10-30 20:44:07 · 1100 阅读 · 0 评论 -
qt创建临时文件
QTemporaryFile * createNativeFile(QFile & file) :// 创建本地临时文件,如果文件不是本地文件,使用QDir::tempPath()创建一个QTemporaryFile,将文件的内容复制给它。这是一个重要的技术,避免了存储在临时文件的应用程序数据损坏。注意:为了验证效果,我们使用了setAutoRemove(false),如果使用完需要删除临时文件,可以开启自动删除模:setAutoRemove(true),也可以手动删除:tmpFile.remove()。原创 2023-08-27 22:04:29 · 1077 阅读 · 0 评论 -
qt检查文件夹是否有写权限
在判断一个目标路径是否可写时,QFileInfo的isWritable()并不好用,一般我们会基于QFile尝试在目标路径新建一个临时文件,通过判断文件是否创建成功间接判断目标路径是否可写。继续排查,官方文档描述:a)如果未启用 NTFS 权限检查,Windows 上的结果将仅反映文件是否标记为只读。如果自己实现这个逻辑,需要做文件打开,关闭,删除等一系列的处理,可以借助QTemproryFile类实现同样的目的。b)在 NTFS 文件系统上,出于性能原因,所有权和权限检查默认是禁用的。原创 2023-08-27 22:00:43 · 2002 阅读 · 0 评论 -
std vector 用法
return a>b;// 从大到小排序return a>b;});//使用lambda表达式。原创 2023-07-31 22:49:12 · 704 阅读 · 0 评论 -
c++获取硬盘or分区序列号
此信息以特定分区类型(如 ext4、xfs)的格式存储,并在重新格式化时发生变化。在使用 Windows 时,可以使用命令获取硬盘分区的(或多或少唯一的)序列号。Linux 有类似的东西吗?获得硬件设备的唯一编码,并且可以通过编程方式检索?原创 2023-06-19 21:01:39 · 1614 阅读 · 1 评论 -
win10 编译Eigen库
将环境设置为“Debug”和“×64”,然后在VS中打开属性管理器界面,右键“Debug|×64”,选择“添加新项目属性表”。最后,把“D:\env\Eigen3.4\share\eigen3\cmake”中的四个.cmake文件复制到“D:\env\Eigen3.4\include\eigen3”目录下。等待VS分析工程和文件完毕后,确保VS当前是“Release”和“×64”模式,在“解决方案资源管理器”中,右键“ALL_BUILD”,点击“生成”。点击“Configure”,设置环境。原创 2022-09-22 21:32:18 · 2711 阅读 · 1 评论 -
ceres 库引用错误处理
2、ceres\internal\numeric_diff.h(150): error C2589: “(”:“::”右边的非法标记。方法1、设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Vsual C++的min/max宏定义。项目属性 -> C/C++ -> 预处理器 -> 预处理器定义 (此处添加预定义编译开关 NOMINMAX)器->预处理器定义,加:GLOG_NO_ABBREVIATED_SEVERITIES。原因:min/max两个宏被污染了。项目属性->C/C++ ->原创 2022-09-07 22:41:25 · 1207 阅读 · 0 评论 -
c++ 中 cout 对小数输出格式化
输出浮点数,显示时格式有点乱,且自动转成科学计数方式,不直观。查找,解决浮点数格式化问题。原创 2022-09-07 22:34:29 · 929 阅读 · 0 评论 -
vs2017创建c++动态库工程
开发环境:VS2017、WIN10。1、vs2017动态库工程创建文件->新建->项目。新建项目页面中选择,Visual C++->Windows桌面,选择右侧的空工程,添加名称及位置,点击"确定",创建工程。解决方案平台选:Debug, x64。注意:发布时,选择Release模式。菜单栏上,项目->属性,进入属性页管理。配置属性->常规,配置类型改为"动态库(.dll)",点击应用、确定。完成工程配置。...原创 2022-03-17 21:42:56 · 3815 阅读 · 1 评论 -
基于信号量的线程同步
在多线程应用程序中,由于多个线程的存在,线程之间可能需要访问同一个变量,或一个线程需要等待另外一个线程完成某个操作后才产生相应的动作,这时候就需要做线程同步。所以,需要线程同步情况:1)多个线程之间访问同一个变量;2)一个线程需要等待另外一个线程完成某个操作后才产生相应的动作。问题引入:示例1,使用了信号与槽机制,在产生新的骰子之后使用信号通知主线程读取新数据。如果不使用信号与槽,就需要主线程进行查询。1、基于互斥量的线程同...原创 2021-10-21 23:04:19 · 328 阅读 · 0 评论 -
qt多线程系列文章目录
1、使用qt实现多线程编程2、qt 多线程编程信号与槽3、qt 多线程示例(一)4、qt 多线程示例(二)5、qt 线程同步-互斥量(Qmutex)6、qt 线程同步-读写锁(QReadWriteLock)7、qt 线程同步-条件等待(QWaitCondition)8、基于信号量的线程同步9、qt下使用opencv读取视频10、生产者消费者模式最佳实践11、qt信号与槽通信qRegisterMetaType的用法...原创 2021-10-21 22:59:21 · 700 阅读 · 0 评论 -
生产者消费者模式最佳实践
测试环境:ubuntu18.04+opencv4.2+Qt一个生产者-消费者模式下的视频处理框架。基础结构:视频读取类线程不断读取视频帧,处理类线程对图像进行处理,之后通过信号与槽机制在主线程中显示。特点:视频读取、处理为独立线程,主线程中只做显示调度。应用一、显示主线程等待处理线程处理完后显示图像。首先需要定义全局变量:g_base.h文件:#ifndef G_BASE_H#define G_BASE_H#include <QMutex>#incl...原创 2021-10-20 23:29:14 · 1498 阅读 · 3 评论 -
qt下使用opencv读取视频
测试环境:ubuntu18.04+opencv4.2+Qt一个基础的opencv读取视频并显示demo。video.pro文件:SOURCES += main.cppINCLUDEPATH += /usr/local/opencv4/include/opencv4 \ /usr/local/opencv4/include/opencv4/opencv2LIBS += -L/usr/local/opencv4/lib -lopencv_freetype -l原创 2021-10-20 23:25:17 · 2402 阅读 · 1 评论 -
qt 线程同步-条件等待(QWaitCondition)
在多线程的程序中,多个线程之间的同步实际上就是它们之间的协调问题。前面使用锁的方式(QMutex和QMutexLocker、QReadWriteLock和QReadWriteLock、QWriteLocker)都有一个通用的问题:在一个线程解锁资源后,不能及时通知其他线程。QWaitCondition提供了另外一种改进的线程同步方法,QWaitCondition与QMulex结合,可以使一个线程在满足一定条件时通知其他多个线程,使它们及时作出响应,这样比只使用互斥量效率要...原创 2021-10-20 23:14:58 · 6605 阅读 · 2 评论 -
qt 线程同步-读写锁(QReadWriteLock)
使用互斥量时存在一个问题:每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程读取某个变量,使用互斥量时也必须排队。而实际上若只是读取一个变量,是可以让多 个线程同时访问的,这样互斥量就会降低程序的性能。例如,假设有一个数据采集程序,一个线程负责采集数据到缓冲区,一个线程负责读取缓冲区的数据并显示,另一个线程负责读取缓冲区的数据并保存到文件。实际上,数据生成后,显示和保存同时访问buff时并不会冲突。Qt提供了QReadWriteLock类,...原创 2021-10-20 23:10:31 · 1894 阅读 · 0 评论 -
qt 线程同步-互斥量(Qmutex)
在多线程应用程序中,由于多个线程的存在,线程之间可能需要访问同一个变量,或一个线程需要等待另外一个线程完成某个操作后才产生相应的动作,这时候就需要做线程同步。所以,需要线程同步情况:1)多个线程之间访问同一个变量;2)一个线程需要等待另外一个线程完成某个操作后才产生相应的动作。问题引入:示例1,使用了信号与槽机制,在产生新的骰子之后使用信号通知主线程读取新数据。如果不使用信号与槽,就需要主线程进行查询。1、基于互斥量的线程同...原创 2021-10-20 23:08:05 · 12880 阅读 · 3 评论 -
qt 多线程编程信号与槽
QThread类提供不依赖于平台的管理线程的方法。一个QThread类的对象管理一个线程,一 般从QThread继承一个自定义类,并重定义虚函数run(),在run()函数里实现线程需要完成的任务。1、信号与槽的连接方式信号与槽的连接函数的原型为:bool QObject::connect (const QObject * sender, const char * signal, ...原创 2021-10-20 22:55:05 · 2522 阅读 · 0 评论 -
使用qt实现多线程编程
QThread类提供不依赖于平台的管理线程的方法。一个QThread类的对象管理一个线程,一 般从QThread继承一个自定义类,并重定义虚函数run(),在run()函数里实现线程需要完成的任务。1、线程基础1.1、GUI线程与工作线程每个程序启动后拥有的第一个线程称为主线程,即GUI线程。QT中所有的组件类和几个相关的类只能工作在GUI线程,不能工作在次线程,次线程即工作线程,主要负责处理GUI线程卸下的工作。所以,一些GUI显示的工作只能...原创 2021-10-20 22:45:03 · 2623 阅读 · 0 评论 -
Qt多线程示例(二)
尝试使用信号与槽机制实现同步。QDiceThread线程类发送数据后进行暂停,Process类中定义信号,当数据处理完毕后发送处理完信号,QDiceThread线程类接收到信号后,再次开启数据生成。Process类更改:# 1. 类定义时声明信号signals: void processEnd(); // 主线程处理完毕 # 2. Process::Process() 中信号与槽关联connect(this, SIGNAL(processE...原创 2021-10-08 22:29:35 · 325 阅读 · 0 评论 -
Qt多线程示例(一)
数据生成器每隔500ms不断的生成新的数据,主线程进行处理和显示操作。main()函数中定义变量,启动线程,之后开启事件循环,等待进程结束。实现方式:主线程中使用Process类管理业务逻辑处理。在Process类中定义QDiceThread类实例对象threadA,threadA调用自身函数实现QDiceThread线程类的开启、关闭、暂停,QDiceThread线程类的run函数中不断产生新的数据,通过信号与槽机制,发送至Process类,Process类onthre...原创 2021-10-08 22:27:38 · 1158 阅读 · 0 评论 -
c++定义全局变量最佳实践
在C++中定义全局变量是应该尽量在.cpp文件中定义,而不要在.h文件中 定义,定义好了之后,可以在.h文件中利用extern关键字进行声明。如果在.h文件中定义的话,多层包含可能会引起重复定义的错误。下面是一个示例:在g_bash.cpp中定义全局变量:// g_bash.cpp#include "g_base.h"int g_TicketCount = 0; // 定义全局变量并初始化在g_bash.h文件中利用extern关键字进...原创 2021-10-08 22:21:08 · 1860 阅读 · 0 评论 -
linux下libconfig读取配置文件
linux下可以轻松的使用libconfig库读取配置文件,下面举例。使用Qt运行测试:.proCONFIG += c++11 console SOURCES += main.cpp LIBS += /usr/local/lib/libconfig++.so测试代码:#include <string>#include <iostream>#include <libconfig.h++>using namespace std;...原创 2021-09-28 22:33:57 · 609 阅读 · 0 评论 -
c++ sleep函数头文件
c++ 标准库并不支持睡眠函数1、windows下支持,需要引入头文件windows.h,切记Sleep首字母大写#include<iostream>#include<windows.h>usingnamespacestd;voidmain(){//睡眠5秒再输出Sleep(5000);std::cout<<"Hi,Gril!"<<std::endl;}2、linux下支持,需要引入头文件...原创 2021-09-27 22:21:54 · 40252 阅读 · 1 评论 -
linux glog使用
官方地址:https://github.com/google/glog,推荐使用0.3.5版本,避坑。日志级别:0 - debug1 - info (still a LOT of outputs)2 - warnings3 - errors对应级别的日志打印在对应级别的日志文件中,并且高级别的日志同时打印在本级别和低级别中。例如 INFO中会有WARNING级别的输出。LOG(INFO) <&...原创 2021-09-27 22:16:48 · 2247 阅读 · 3 评论 -
QT多线程下的信号与槽机制
QT 中 QObject 作QT中类的最终父类,具有自定义信号与槽的能力,只要继承自这个类的类,也一样拥有自定义信号和槽的能力。QT 中定义信号与槽是十分有用的,QT 下多线程类QThread 是继承自 QObject,同样具有有自定义信号和槽的能力。1、QThread类QThread类提供不依赖于平台的管理线程的方法。一个QThread类的对象管理一个线程,一 般从QThread继承一个自定义类,并重定义虚函数run(),在run()函数里实现线程需要完成的任务。...原创 2021-09-27 21:53:35 · 4619 阅读 · 0 评论 -
uint8_t和char的相互转换
uint8_t *和char*的相互转换以及uint8_t *和int16_t*的相互转换实际应用需要,实现uint8、int16_t、int32_t的按字节传输,实现发送和接收功能。如int16_t,需要将int16_t转为2字节发送,再接收两个字节解码转回为Int16_t。intx与char *的转换:#include <iostream>using namespace std;int main(){ unsigned char buf...原创 2021-09-14 21:51:21 · 24494 阅读 · 1 评论 -
c++字符串格式化
测试环境(头文件):#include <iostream> #include<cstdio> // or #include<stdio.h> sprintf_s函数头文件 #include <string> using namespace std;1、使用std::to_string()数值转字符串int a = 1; string b = to_string(a);2、sprintf_s实现格式化控制double a = 1原创 2021-09-14 21:49:53 · 2131 阅读 · 0 评论 -
Qt信号与槽通信qRegisterMetaType的用法
如果要在Qt信号槽中使用自定义类型,需要注意使用qRegisterMetaType对自定义类型进行注册。当然在不跨线程时使用自定义类型signal/slot来传递,可能不会出现什么问题;一旦涉及跨线程就很容易出错,回想下信号槽的作用就是用来对象与对象之间通信的,难免会跨线程,建议在使用自定义类型利用信号槽通信时,最好先通过qRegisterMetaType()将自定义类型进行注册,以免出错。总结qRegisterMetaType使用方法如下:1、注册位置:...原创 2021-08-19 20:55:23 · 1538 阅读 · 0 评论 -
std list
目录1、list构造2、元素插入2.1、insert2.2、push_back or pop_front3、访问3、元素移除3.1、pop_back or pop_front3.2、erase3.3、remove or remove_if3.4、clear3.5、resize4、list特殊函数4.1、unique4.2、splise4.3、sort4.4、merge4.5、reverse4.6、swapList使用一个doubly原创 2021-03-27 16:22:48 · 3114 阅读 · 0 评论 -
std map用法
目录1、map定义2、赋值 or 插入3、访问3.1、通过key直接访问3.2、迭代器4、查找key值是否存在5、移除key6、容量7、顺序比较map的底层结构是红黑树,映射是关联容器。map中的元素是一些关键字-值对:关键字 起到索引的作用,值则表示与索引向关联的数据。关键字是唯一的,不能重名。对于迭代器来说,可以修改实值,而不能修改key。根据key值快速查找记录,查找的复杂度基本是Log(N),map是按key值排序,且与插入顺序无关。头文件:#i原创 2021-03-26 21:39:09 · 10679 阅读 · 1 评论 -
Qt当前工作目录
Qt应用程序中加载资源文件给了./开始的相对路径,但不识别,因此对工程目录进行测试验证。QDir提供了一个静态函数 currentPath() 可以获取当前工作目录,调用方式如下:#include <QDir> QString curPath = QDir::currentPath();1)如果是编译器下运行,生成的工程文件目录就是当前工作目录;2)如果我们是双击一个程序运行的,那么程序的工作目录就是程序所在目录;3)如果是在命令行下运行一个程序,那么运行程序时在命令行的原创 2021-01-11 21:36:44 · 6182 阅读 · 0 评论 -
Qt在命名空间中导出类和函数
验证环境:ubuntu18.04+Qt5.14 / win10+Qt5.14验证内容:以命名空间的方式导出类,导出函数带参数/不带参数的函数。1、导出变量导出的动态库本身需要提供头文件,在命名空间中直接定义变量即可。#ifndef COMMON_LIB_H#define COMMON_LIB_H#include common_global.h # 导出宏定义namespace common # 命名空间common{ int a = 1;}#endif // COM原创 2020-12-22 22:49:30 · 2953 阅读 · 1 评论 -
qt中文乱码处理方法
环境:Windows10开发工具:VS2017,Qt5.141、界面现象UI界面现象:代码如下:fLabCurFile=new QLabel; //用于显示当前文件名的标签fLabCurFile->setMinimumWidth(150);fLabCurFile->setText(QObject::tr("当前文件:"));ui->statusBar->addWidget(fLabCurFile);//添加到状态栏2、配置系统字体有遇到同样问原创 2020-12-22 21:47:42 · 760 阅读 · 0 评论 -
Qt动态库封装工程最佳实践
目录1、建立并生成动态链接库2、导出类工程目录3、测试生成的DLL验证环境:Win10+Qt5.14验证内容:Qt导出类。1、建立并生成动态链接库1、打开QtCreator,新建工程,我们选择Library,C++库,然后就是choose。2、然后在弹出的C++库对话框我们默认类型共享库,名称为MyDll。然后,一直下一步,直到点击完成。3、生成的代码结构MyDll.proQT -= gui # 不需要界面TARGET = MyDll #原创 2020-12-14 22:13:54 · 5849 阅读 · 0 评论 -
Qt创建使用动态链接库工程
验证环境:ubuntu18.04+Qt5.14验证内容:导出类,导出函数带参数/不带参数的函数。1、建立并生成动态链接库1、打开QtCreator,新建工程,我们选择Library,C++库,然后就是choose。2、然后在弹出的C++库对话框我们默认类型共享库,名称为MyDll。然后,一直下一步,直到点击完成。3、生成的代码结构MyDll.proQT -= gui # 不需要界面TARGET = MyDll #工程名TEMPLATE = lib #原创 2020-12-14 21:10:34 · 1255 阅读 · 0 评论 -
c/c++基础知识点整理
这段时间比较频繁的使用c/c++,嵌入式板子上还是c的性能更强。因此,对c、c++基础知识点整理。整理来源:基础课程C语言程序设计、c++程序设计、数据结构、程序员面试笔试宝典。适合毕业找工作的在校生及工作中需要使用c/c++的算法类工程师。...原创 2020-11-22 22:27:41 · 365 阅读 · 3 评论 -
输入一个链表,输出该链表中倒数第k个结点。
测试用例:用例:0,{1,2,3,4,5}对应输出应该为:{}c++实现:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToT...原创 2020-03-26 22:38:54 · 178 阅读 · 0 评论 -
把一个字符串转成整数
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M 热度指数:344857链接:https://www.nowcoder.com/questionTerminal/1277c681251b4372bdef344468e4f26e 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回...原创 2020-03-26 21:48:20 · 311 阅读 · 0 评论