自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 非void函数缺少返回值导致的程序崩溃

结论:可以确定程序发生崩溃是因为非void函数缺少返回值。修改之后问题解决了。

2025-12-04 22:17:38 594

原创 uvcdynctrl 大量写入 uvcdynctrl-udev.log 文件,导致根目录磁盘爆满

环境:ubuntu20.04 + rk3568。

2025-11-25 19:43:18 602

原创 Linux:systemd服务之.service文件(二)

systemd通过单元文件(Unit files)来描述和管理不同的系统资源和服务。Systemd 支持的 12 种 Unit 文件类型。其中最常用到的就是Service单元文件。service文件通常位于以下目录Systemd 默认从目录 /etc/systemd/system/ 读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 /usr/lib/systemd/system/,真正的配置文件存放在那个目录。

2025-11-11 23:03:25 778 2

原创 Linux:认识Systemd服务(一)

例如,在服务器上,这是网络正在运行并且多个用户可以登录的状态。这些文件由后缀 .target 标识。与单元文件类似,可以通过依赖关系嵌套不同的目标。例如,multi-user.target 需要通过目标(及其他单元)来设置登录和用户会话服务。常见 systemd 目标:默认会引导。default.target 文件是指向实际目标文件(例如桌面工作站的 graphical.target)的符号链接。对于服务器,它通常是 graphical.target。关闭系统并关闭电源。

2025-11-11 23:03:13 697

原创 Ubuntu设置程序开机自启动:基于.service文件实现

在之前的一篇文章中,介绍了在ubuntu中基于.desktop文件实现程序开机自启动的方法但是上面这种方法只适合不需要root权限的程序自启动在有的情况下,我们的程序需要以root身份来运行才能保证有足够的权限进行操作。这时候可以通过.service文件实现。

2025-11-05 02:11:13 1011

原创 Ubuntu设置程序开机自启动:基于.desktop文件实现

解决方法:修改GateWay.desktop文件,增加打印输出/home/Desktop/GateWay_start.log文件。Type: 用于指定 desktop 文件的类型(包括 3 种类型:Application、Link、Directory)关键是无论是为root用户还是普通用户设置了qt的环境变量,还是提示找不到这个qt库。Name: desktop 文件最终显示的名称(一定要注意和 desktop 文件名的区别)继续修改GateWay.desktop文件,在运行程序前在当前环境导入qt的库。

2025-10-30 20:05:56 315

原创 Qt报错:QObject: Cannot create children for a parent that is in a different thread.

然后通过moveToThread将A移到子线程中,通过调用A的接口再调用serial->write(...),此时serial->write(...)是在子线程中执行。有三个类A、B、C,其中A通过moveToThread放在子线程(模拟项目中的模块A),B作为A的成员(模拟项目中的QSerialPort类)。大概流程就是,模块A移到子线程,通过模块A的接口,调用到QSerialPort的write方法,将modbus指令发送到串口。首先,QSerialPort类是作为模块A的成员对象的,

2025-10-26 17:36:59 354

原创 记录一次rk3568硬解码时cpu占用率高的问题

在mpp解码后得到yuv格式的图像数据,我用QByteArray将图像数据保存并作为函数的返回值。但一旦把解码后的大帧数据(我解码的是1080p的图像,一帧yuv图像占1920 x 1080 x 1.5 ≈ 3MB大小)塞进 QByteArray,就变成了 纯 CPU memcpy,而且每一帧都要拷贝,所以导致cpu使用率飙升。今天在rk3568开发板上测试硬编硬解的时候发现cpu使用率异常的高,之前测试过只跑一个硬解码demo的话cpu使用率在5-10左右,今天测试居然占用到90。

2025-09-09 23:43:06 300

原创 解决linux中磁盘爆满(准确说是文件系统爆满)导致mysql启动失败的问题——对文件系统进行扩容

到这里打算先把oem和userdata中的内容先复制到/dev/mmcblk0p6分区当中(这里删除了一些日志文件还能有一些空余的空间),然后把mmcblk0p7/8分区先删除,等把mmcblk0p6扩容后再重新建立分区。2、因为我的是开发板不是虚拟机,并且通过fdisk -l后发现没有多余磁盘空间,要想扩容磁盘只能更换更大的emmc/sd卡/硬盘,这显然是不现实的,因此。(7)扩容mmcblk0p6上的文件系统/dev/root(这里偷个懒,不重新建mmcblk0p7/8分区了,里面的文件也不是很重要)

2025-08-19 15:04:04 1262

原创 QT:交叉编译mysql驱动库

最近在移植开发中需要用到mysql驱动库,但是从Qt 5.12版本开始,官方不再在源码中默认包含MySQL数据库驱动,用户需要自行编译MySQL驱动插件。所以需要自行编译目标平台的mysql驱动库。目标平台:aarch64qt版本:5.15.4 (源码)mysql版本:8.0.42(aarch64)qmake:5.15.4 (x86,用的是交叉工具链中的qmake)

2025-08-04 23:53:45 712

原创 FFmpeg:因码流采集与封装不同步导致录制出来的MP4文件会出现黑屏、绿屏的问题

项目要求实时播放视频,并且需要支持播放中途可以录制视频。但是录制出来的文件会黑屏,过一段时间后正常显示。即:码流采集—>播放—>(一段时间后)录制MP4,黑屏出现的时间就在采集到录制之前。如果出现绿屏情况,是因为录制视频时传入的第一帧不是关键帧。解决办法:对首帧时间戳进行了归零调整,相关代码如下。将码流封装成文件主要是通过这个接口实现的。

2025-07-30 19:57:17 429

原创 记录Linux下ping公网失败的问题

在我的系统中配置了两个网络接口,一个网口(eth3)接的网线,能访问外部网络;可以看到确实存在两个默认路由(有两个default),而192.168.1.1走的是内网(连接了ipc摄像头),所以可能就是因为在ping外网时使用了内网网关导致ping失败。(路由的作用就是用来实现不同子网之间的通信,192.168.1.1所在路由只是连接了ipc摄像头所以不能访问其他网络,可以删除)(因为该路由只是用于连接ipc摄像机,不需要用来访问外网,所以可以删除),删除后再尝试ping外网,这次能ping通了。

2025-07-30 19:41:08 952

原创 RK3568基于mpp实现硬解码(三):rga 实现图像格式转换

具体见这段代码:src_buf_size和dst_buf_size的大小不是mpp_buffer_get_size来决定的,需要根据官方demo给出的公式来计算。调用到imcvtcolor时程序崩溃,提示: RgaBlit(1465) RGA_BLIT fail: Invalid argument。mpp硬解码后的图像帧保存在MppFrame之中,并且解码后图像格式是NV12。在QT中需要转换为RGB格式才能显示。核心错误:RGA buffer 大小不足,导致提交任务失败。

2025-07-29 00:26:20 726

原创 RK3568基于mpp实现硬解码(二):FFmpeg + mpp实现ipc摄像头图像解码

在上一篇文章中已经成功编译mpp并导入到项目中,接下来基于mpi接口实现解码器说明一下视频图像是通过ipc摄像头采集的。在项目中通过FFmpeg的RTSP拉流获取ipc摄像头的码流数据,FFmpeg拉流这部分不作叙述,只需要知道FFmpeg拉流后数据保存在AVPacket这个结构体当中。

2025-07-28 22:13:41 1432

原创 RK3568基于mpp实现硬解码(一):mpp库的编译使用

本文介绍了在RK3568开发板上使用MPP库实现IPC摄像头码流硬解码的过程。主要包括:1)从GitHub下载MPP源码并参考开发文档;2)配置交叉编译工具链(aarch64架构),修改CMake文件设置编译器路径;3)完成编译后,将头文件和库文件导入QT项目,通过修改pro文件添加包含路径和链接库。最终实现在项目中调用MPP接口进行硬解码,有效降低CPU使用率。

2025-07-27 18:40:54 1465

原创 ubuntu22.04下配置qt5.15.17开发环境

自从qt5.15版本开始,不再提供免费的离线安装包,只能通过源码自行编译。刚好最近需要在ubuntu22.04下配置qt开发环境,于是写篇文章记录配置的过程。其实一开始是想配置qt5.15.2的,但是在编译配置参数这一步骤中出现如下报错从错误日志来看,核心问题是:一通操作还是没能解决,于是打算编译其他版本的qt试试,于是便选择了qt5.15.17补充:后面根据这篇文章:Loading...貌似这是编译qt5.15.2时都会出现的一个bug,。

2025-07-14 20:18:33 1193

原创 QT配置交叉编译环境时,添加qmake失败,报错:The qmake executable xxx/qmake could not be added:

开发环境:虚拟机ubuntu20.04 x86目标板环境:arm最近在将项目移植到arm开发板上运行,需要将项目编译成arm版本。在qt配置交叉编译环境时,添加qmake报错。根据报错提示在网上搜到的相关资料都比较少,于是便写篇文章记录下来。

2025-07-12 01:33:22 1420

原创 在Linux中通过命令行编译QT项目(基于Qmake + make)

2、进入qt的安装目录,通过搜索框获取qmake所在路径,比如我的qmake是在~/qt5.14.2/5.14.2/gcc_64/bin路径下(因为懒得配置qt的环境变量了),然后进入到项目.pro文件所在路径/home/qing222/code/test_delete/untitled/,执行以下命令。1、在/home/qing222/code/test_delete/untitled/下有一个简单的qt项目,包含.cpp .h .ui .pro等文件。3、编译完成,在编译路径下可看到如下文件。

2025-07-10 00:30:39 963

原创 解决ubantu桥接模式下无法连接网络的问题

原因:桥接模式默认桥接的是主机的 Wi-Fi 网卡,插上有线网后,虚拟机仍然尝试桥接 Wi-Fi,这时 Wi-Fi 已断开,导致虚拟机无网络。2、找到类型为桥接模式的模式的网络,在“已桥接至”下拉框中选择自动,最后虚拟机成功连上网络。1、关闭虚拟机,左上角“编辑”->“虚拟网络编辑器”->“更改设置”问题描述:虚拟机的网络适配器选择的是桥接模式,,ping百度也ping不通。解决办法:更改桥接的物理网卡。

2025-07-03 09:41:16 949

原创 记录一个QT中pro文件换行需要注意的问题

在输入LIBS += -L$$PWD/ffmpeg/lib后直接换行,导致编译时发生了报错。需要加换行符 \,这样更加规范,同时也能避免某些意想不到的问题。在ubantu上使用qt编译,在链接so库时候如下。

2025-07-02 19:49:56 158

原创 解决Linux下根目录磁盘空间不足的问题

gparted 是一个强大的图形化分区管理工具,用于在 Linux 系统中对磁盘分区进行操作。它支持多种文件系统,包括 ext2/ext3/ext4、NTFS、FAT16/FAT32 等,可以执行各种分区操作,比如创建、删除、调整大小、格式化、检查、修复等。

2025-07-02 19:28:41 1219 1

原创 关于网络编程中的memset的一些疑问

网络编程中,结构体如 sockaddr_in 有很多字段,有些字段是保留位或填充位(如 sin_zero)。问题一:memset这句代码的作用是什么?为什么要使用到这句代码?所以用 memset 清空是网络编程中一种标准初始化写法。问题二:为什么server_addr要通过char*进行强转?首先要理解将结构体通过char*进行强转的实质是什么——结构体指针经过(char*)强制转换后,在学习网络编程时遇到这样一行代码。

2025-06-24 00:34:40 354

原创 Linux切换中文输入法

3、在“设置-键盘”中添加中文(智能拼音),此时可以看到有中文输入法了。shfit切换中英文。2、终端输入ibus-setup打开ibus终端配置界面,添加对应输入法。1、确定键盘输入法系统使用的是ibus(“应用”-“语言支持”)

2025-06-23 22:15:23 1127

原创 Qt:解决MSVC编译器下qDebug输出中文乱码的问题

使用msvc编译器,通过qDebug输出打印信息为乱码(显示问号或者乱码)在.pro文件中添加如下,重新构建运行即可显示中文内容。百度到以下方案,但是没有效果。

2025-04-14 17:15:52 514

原创 ubantu执行sudo chown -R username xxx(文件夹)命令失效

设置完后共享文件夹显示锁标记(文件夹的权限对当前用户设置为只读)。解决方法:既然 chown 无效,可以通过挂载时指定用户 ID(UID)和组 ID(GID),让当前用户成为所有者。于是尝试通过以下命令将文件夹所有者从root改为当前用户,执行没有错误,但文件访问权限并未改变,文件夹还是处于上锁状态。1、CIFS 是 Windows 的文件共享协议,Linux 不能直接修改 Windows 文件的所有者。(2)使用uid和gid重新挂载,让当前用户成为文件所有者。需求:解决文件夹上锁的问题。

2025-04-03 17:33:57 586

原创 解决Ubuntu文件夹锁标记

文件夹锁标记是Ubuntu系统中常见的权限问题,但通过合理的权限管理和使用适当的命令,可以轻松解决这一问题。本文介绍了多种去除文件夹锁标记的方法,并提供了权限管理的最佳实践,帮助您更好地管理和维护Ubuntu系统。

2025-04-02 08:58:09 2332

原创 Qt:QWebEngineView显示网页失败

总结:QWebEngineView显示网页失败的根本原因在于在qt运行时 QtWebEngine 所需的资源没有被正确加载,因为本人还没去深入了解使用QWebEngineView显示网页的全流程,可能是因为缺少了一个正式的添加 webenginewidgets模块的步骤导致所需资源没能被正确加载,因此只能通过这种方式手动添加资源到编译路径的exe同级目录下。今天在新电脑搭建qt开发环境,在运行程序时发现通过QWebEngineView显示的html失败,同样的代码在旧电脑上没有这个问题。

2025-03-25 18:14:20 1234

原创 关于Typora打开出现空白闪退、cl*sh无界面显示并出现闪退的问题

最近公司给配了新电脑,需要在新电脑重新搭建开发环境。有些常用的软件通过U盘直接拷到新电脑使用(如Typora、clash等)。这些软件在原电脑能正常使用,但是在新电脑却出现了无法显示界面并且闪退的情况。通过搜索发现与新电脑使用了GPU的沙盒机制有关,猜测软件无法显示的问题可能可以归类为同一原因,因此记录一下。原电脑配置:win10家庭版新电脑配置:win11家庭中文版 24H2。

2025-03-25 09:18:00 2136

转载 Qt:界面类名的修改

Qt 中如果想要使用多个已经写好的界面类,往往会发现界面类的名称要么是“MainWindow”,要么是“Widget”,或者是“Dialog”。那么重名的界面类在一起就会在所难免。或者你想修改界面类的名称。那么一定要切记不可直接修改界面类的名称。1.修改.ui文件名称为xxxmainwindow.ui/xxxwidget.ui/xxxdialog.ui :在工程树下右键修改即可。2.修改.h,.cpp名称与.ui文件名称对应:同样是在工程树下右键修改即可。然后在此处即可方便的修改。

2025-03-21 11:13:59 335

原创 Qt:提升类时报错 无法打开包括文件:“xxx.h”:No such file or directory

(1)在项目已添加一个qt设计师界面类xxx。原因是在提升类时头文件没有加上对应的子路径。(2).pro文件也已经添加相关信息。检查后发现是.h文件的路径没导入对。

2025-03-19 10:20:27 477

原创 Qt:QDataStream::setByteOrder,数据流大小端设置,高字节数据先发送

stream.setByteOrder(QDataStream::LittleEndian)是通过小端的形式将数据存到QByteArray 中,如下图。设备:上位机、模拟的下位机、模拟串口软件均在windows上运行,通过modbus rtu协议进行通讯。上位机想接收的是0x000A(10),实际接收的却是0x0A00(2560)计算机从低地址开始读取,所以发送的数据字节为0A 00,与预期不符。要想高字节数据先发送,则需要采用大端存储的方式。下位机发送一个quint16类型的数据。

2025-02-24 16:46:40 403

原创 在串口通信中,对通信协议中字节数据的理解

这就是为什么要向下位机发送02 03 ED 1E 00 11 D0 9F,而不是直接发送“我要读取从寄存器0xED1E开始的17个寄存器数据”如果只是单纯的把02 03 ED 1E 00 11 D0 9F转为字节数组发给下位机,是不行的。我们需要把“人”能理解的内容(文本、图片、视频)转成计算机能理解的内容(二进制数),所以需要转换为字节类型的数据。在串口通讯中我们常常需要传输字节类型的数据,而通信协议相当于一套规则,解释这段数据是什么意思,"0"(字符 0)在 UTF-8 中表示为 0x30。

2025-02-21 14:09:35 530

原创 Qt前端——实现自定义控件

在mainwindow.ui中只看到刚添加的控件,具体的实现依赖于自定义的类中(比如QSerial_one)运行效果实现自定义控件,首先需要新建Qt设计师界面类,在新建类中完成相关界面或逻辑,然后在别的类中通过“提升为”将自定义控件引入。

2025-02-17 00:46:53 529

原创 Qt前端——Input Widgets输入控件组

用于提供一个下拉列表,用户可以从列表中选择一个选项。

2025-02-13 00:08:52 890

原创 Qt前端——Containers容器组控件

并提供一个带标题的边框。它常用于界面布局中,帮助用户更直观地理解控件之间的关系。QGroupBox 可以设置为可选的(checkable),即带有一个复选框,用户可以通过勾选或取消勾选来启用或禁用组内的控件。实现效果如下:如图,Group Box2设置为可选的,当取消勾选时Group Box2内的控件被禁用。

2025-02-12 00:41:20 1288

原创 Qt前端——Item Widgets:展示列表、表格或树形结构

是一组用于显示和操作项目(items)的控件,通常用于展示列表、表格或树形结构的数据。这些控件允许用户与数据进行交互,如选择、编辑、排序等。

2025-02-07 23:41:51 522

原创 Qt前端——Button控件

1、实现效果如下:在按钮中添加图片资源以及文字描述。一般使用Tool Button实现。1.1、过程(1)首先先在项目中添加好资源文件(2)选择Tool Button,在qt designed中找到icon(图标),选择资源,选择(1)中添加的图片资源添加后效果如下,会发现图片较小(3)通过修改iconSize可以修改资源大小修改后效果如下(4)按钮添加图片资源的同时添加文字:找到toolbuttonstyle->选择toolbuttontextbesideicon效果。

2025-02-06 23:25:56 499

原创 Qt:将quint16类型数据转为QByteArray

QDataStream 通过流式操作符 (<< 和 >>) 读写数据,类似于 C++ 的 std::iostream。在开发过程中遇到如下情况:需要将一组quint16类型的数据转为QByteArray发送给上位机,QDataStream 是 Qt 提供的二进制数据流类,用于在 文件、网络、内存 等介质中。法一:quint16—> QString—>QByteArray。法二:使用QDataStream类。它可以自动处理数据的字节序和。

2025-02-06 17:48:52 445

原创 Qt:将QByteArray转为QString

在开发过程中,需要解析上位机传来的数据。但串口数据传输是以二进制形式传输,在QT中通过QByteArray类型来存放。.toUpper()将十六进制字符串转换为大写(默认 toHex() 生成的是小写)toHex() 会将 QByteArray 的每个字节转换为两位十六进制表示。参数 ' '(空格字符)表示每两个十六进制字符之间插入一个空格,提升可读性。

2025-02-06 16:35:56 591

原创 C++强制类型转换:在上行/下行转换中如何使用static_cast和dynamic_cast

从某个类删除const、volatile和__unaligned属性,,但只限于去除const或volatile等限定符,

2025-01-20 12:02:50 952

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除