- 博客(441)
- 资源 (3)
- 问答 (8)
- 收藏
- 关注
原创 Qt6无法识别OpenCV(Windows端开发)
但实际上,我明明安装了OpenCV4.10.0, 并且也在CMakeLists.txt中加入了相关内容。这段时间在Windows 10上进行Qt6的开发。按照ChatGPT给出的建议,换成了MSVC 编译器就解决了问题。可见类似情况,关注下编译输出很有必要,可能问题就藏在其中。
2025-05-26 22:57:59
316
转载 什么是Qt的开发套件
在 Qt Creator 中,一个 构建套件(Kit) 是对一组构建和运行配置的封装,目的是简化多平台、多架构、多配置(如 Debug/Release)下的项目管理。一个完整的套件会把从编译器到 Qt 库,再到调试器和目标设备的一整套工具链组织在一起,让你只需在套件之间切换,就能无缝地在不同环境中构建和运行程序。在软件开发中,**交叉编译(Cross-Compilation)**指的是在一种平台(宿主机,Host)上生成可运行于另一种平台(目标机,Target)的可执行代码或二进制文件的过程。
2025-05-26 22:20:07
20
转载 SDL3的相关函数分析
建议在调用 SDL_Init 之前,使用 SDL_SetAppMetadata() 或 SDL_SetAppMetadataProperty() 函数报告一些关于你的应用程序的基本元数据。(SDL_Window *) 如果成功了,返回创造出的窗口指针,如果失败就返回NULL,想要获得更多信息就调用SDL_GetError()创建的纹理的像素格式可能与表面的像素格式不同,可以通过 SDL_PROP_TEXTURE_FORMAT_NUMBER 属性进行查询。像素在内存中按行排列,最上面的一行排在首位。
2025-05-19 21:55:40
47
转载 HSV颜色空间
可以想象一个从左到右呈现红色到蓝色光谱的圆锥体,在中心到边缘的方向上,颜色的强度逐渐增加,从底部到顶部,亮度逐渐增加,因此在顶部中心区域形成白色。例如,饱和度为100%的红色是一种鲜艳夺目的红色,而饱和度较低的红色则显得更柔和,偏向粉色或棕色。色彩模型可以表示为一个三维曲面(例如,RGB 色彩模型),也可以扩展到更高的维度(例如,CMYK 色彩模型)。色彩构成了我们的世界。在HSV模型中,亮度值(Value)更强调颜色的发光强度,而在HSL模型中,亮度(Lightness)更侧重于颜色的明暗程度。
2025-05-19 12:52:01
35
原创 出现在‘{‘的段错误
SDL 的 D-Bus 模块是 SDL 在 Linux 上通过 libdbus (freedesktop.org 提供的低级 D-Bus 客户端库)连接到系统总线(system bus)和会话总线(session bus)的部分,它主要用于实现桌面集成功能,例如系统托盘通知、媒体按键处理、屏幕保护禁止、主题查询等。我在我自己的程序中定义了5个线程函数,每个线程函数的工作任务都是放到里面的while循环里来处理的,不同的线程函数之间会通过队列传递数据。把之前的注释消除后,再次编译、运行,结果出现了段错误。
2025-05-09 18:01:49
738
原创 C++错误: multiple definition of `Q‘
在编译过程中出现的链接错误提示multiple definition of 'Q’是由于违反了C++的ODR(One Definition Rule)原则,即全局变量或对象在多个编译单元中被重复定义。由于在头文件中定义了数组Q。当多个源文件(如main.cpp和tasks.cpp)包含该头文件时,每个源文件都会生成Q的一个定义,导致链接时冲突。然而main.cpp和tasks.cpp都包含了头文件Queue.h。
2025-05-08 21:09:00
205
转载 Linux遍历目录
这个程序会先遍历指定目录及其所有子目录,收集所有文件的信息,然后按照文件的最后修改时间从早到晚排序,并打印出排序后的文件完整路径。collect_files 函数递归遍历目录,收集所有文件的信息(路径和修改时间),并将它们存储在动态分配的数组中。compare_files_by_mtime 函数用于比较两个文件的最后修改时间,以便按照修改时间排序。我们定义了一个 File 结构体,用于存储文件的完整路径和文件状态信息(包括修改时间等)。使用 qsort 函数按照修改时间对文件进行排序。
2025-05-08 16:55:37
29
原创 重名导致does not name a type
原来是之前写的一个函数和类FalseColor重名了,将函数改名后编译通过。显然我是定义了类的,不存在没有定义。
2025-05-05 17:05:26
220
转载 Makefile报错: multiple definition of main
说明 main.cpp 中定义了一个 main() 函数,但同时 CMakeCXXCompilerId.cpp.o 文件中也包含了一个 main()(实际上这通常是 CMake 在检测编译器时生成的测试代码,不应该被加入到你的最终目标中)。解决办法,在包含源文件时,把GLOB_RECURSE改成GLOB,否则你项目的构建系统 错误地将 CMake 的内部测试代码当作你项目代码来编译了。今天在执行Makefile函数编译项目文件时(这里的Makefile是用CMake生成的)。咨询ChatGPT才知道原因。
2025-05-03 19:35:35
69
转载 如何用双线性插值缩放图像
例如,大多数模拟电子显微镜图像的像素是矩形的,x 和 y 方向的间距不相等(以匹配样品的周期性),但许多图像显示设备(如电脑屏幕)的像素是方形的,x 和 y 方向的间距相等。仅需知道在离散的 x = x₁, x₂ 和 y = y₁, y₂ 处采样的值,就可以确定函数 f(x, y) 在任意点 (x, y) 处的值,这些离散的 x 和 y 值环绕着点 (x, y)。x 方向上的间距不需要与 y 方向上的相同。在该图中,新点位于 x 方向的 x₁ 和 x₂ 之间,以及 y 方向的 y₁ 和 y₂ 之间。
2025-04-30 17:15:00
77
转载 什么是虚拟内存
页面被写入”指的是某个进程对内存页面执行写操作,即对页面中的数据进行修改。而分页表中的内容指示页面是不是在内存中,如果操作系统或程序在内存中找不到所需内容,那么 MMU 会通过页面错误异常响应缺失的内存引用,以便操作系统在需要时将页面移回内存。在任何情况下,RAM的空间需要去用于更加紧急的情况,数据会从RAM转移至虚拟内存,计算机的内存管理程序负责追踪物理内存和虚拟内存之间的转换。分段也能用来管理虚拟内存,这种方法将虚拟内存分成了不同长度的多个段,在内存中不使用的段可以被转移到硬盘上的虚拟内存空间。
2025-04-30 14:41:43
162
转载 OpenGL的Github项目复现: Plotter3D(1)
GLAD 是一个用于加载 OpenGL 函数指针的库(OpenGL loader), 其具体作用包括: 第一,OpenGL 的函数是在运行时动态加载的(因为不同平台和驱动支持的版本不同)。第二,GLAD 负责查询系统支持的 OpenGL 版本和功能,并将函数指针映射到程序中。GLAD是“OpenGL 加载器”,帮助你访问和使用OpenGL的函数。GLM 是一个C++数学库,专门为OpenGL设计,符合GLSL(OpenGL Shading Language)语法和风格。(实际操作中有的安装的是更新的版本)
2025-03-13 10:50:52
40
转载 什么是链接器(Linker)
这可能涉及到将假定特定基址的代码重定位到另一个基址。计算机程序通常由多个部分或多个模块组成,这些部分或模块不需要被包括在一个目标文件之内,在这种情况下它们使用符号作为相互指向对方的地址,当为了执行而进行链接时,这些符号会被映射至内存地址。在计算机中,链接器或链接编辑器是一种计算机系统程序,用于将一个或多个一由编译器或汇编器生成的目标文件组合成一个单独的可执行文件、库文件等。(1) 被定义的"外部"(external)符号,有时被称为“公共"(public)符号或入口符号,使得该目标文件容易被其它模块调用。
2025-01-29 18:23:54
194
原创 MFC报错: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version.
解决办法: 进入配置管理器,将活动解决方案平台改成Win32。
2025-01-09 00:43:04
444
转载 如何使用OpenCV C++的imdecode函数
今天使用OpenCV的imdecode函数遇到了问题,多次解码失败,参考下:How to use cv::imdecode, if the contents of an image file are in a char array?
2024-12-14 23:58:55
136
原创 OpenMP出现Stack Overflow及其疑问
(1) 32位CPU: 地址指针长度32位,可访问2^32个离散地址,这使得程序最多可以在内存中开出4GB的数据结构。(2) 64位CPU: 地址指针长度64位,可以访问2^64个离散地址,这使得程序最多能在内存中开出16EB的数据结构。(3) 在物理内存的限制之外,64位CPU上的进程可以处理比32位CPU更大的数据集。,关于Visual Studio的x86和x64选项是怎么回事?看来这和OpenMP的机制有关了。我这台电脑是64位操作系统。具体原因还需要进一步查阅资料。这个出错的位置比较有意思。
2024-11-30 23:34:27
528
1
转载 OpenMP练习(2)
这个专家的视频总共27个,我看到了第7个,先用PPT和书巩固下再接着看。终于也能把时间降低到1ms甚至不到1ms了。我运行了几次,时间最多1ms。运行时间只有1ms。
2024-11-28 22:07:08
60
转载 OpenMP练习笔记(1)
GCC (GNU Compiler Collection) 自版本6.1起支持OpenMP 4.5,自版本4.9起支持OpenMP 4.0,自版本4.7起支持OpenMP 3.1,自版本4.4起支持OpenMP 3.0,自版本4.2起支持OpenMP 2.5。它确实会同时计算N个值,其中N是线程的数量。在C/C++中,所有的OpenMP语句都是以#pragma omp开头,后面跟着参数,最后以换行符结束。从上下文中共享的变量会透明地处理,有时是通过传递引用,有时是使用寄存器变量,并在并行块结束时将其清空。
2024-11-27 21:15:54
80
转载 笔记: POSIX线程
线程的另一种终止方式是调用 pthread_exit() 函数,子线程不需要显式地调用 pthread_exit(),因为当线程退出时,该函数会隐式地被调用。创建分离线程的方法,一是在线程属性结构中设置适当的属性,二是在现有的线程中调用pthread_detach(),对分离线程调用pthread_join()会导致报错。函数pthread_join()有2个参数,第一个是要被等待的线程的句柄,第二个参数要么是0,要么是指向一个void指针的地址,该指针将存储子线程返回的值。
2024-11-26 19:14:12
59
转载 OpenMP教程收藏
收藏一些OpenMP的教程:Using OpenMP with COpenMPIntroduction to Parallel Computing TutorialGuide into OpenMP: Easy multithreading programming for C++
2024-11-25 16:43:56
57
转载 笔记: Windows的多线程编程
最好的终结线程的方法是退出它被要求执行的函数,可以通过调用ExitThread()或TerminateThread( )终结线程,但是不推荐,因为它们可能会让应用程序处于不确定的状态。当一个线程想要进入临界区时,它需要调用EnterCriticalSection(),如果没有其他线程进入临界区,调用的线程就能得到它并继续执行,否则就会进入休眠状态,直到另外的线程调用LeaveCriticalSection()离开临界区。通过调用_beginthread()创建的线程,当其退出时,将会关闭自己的句柄。
2024-11-25 14:03:23
199
转载 Github上的Qt项目: QtEVM(11) : 功能Play (按键)
如果传入setVisible的值为true,则控件可见,若传入false,则不可见或用户不能选择。设置帧之间的延时,以毫秒为单位。主要用于显示一个单独的帧。按键的直接关联槽函数。
2024-11-19 21:51:35
64
转载 Github上的Qt项目: QtEVM(10) : 功能Close Video(C)
该函数创建一个文件对话框并带有给定的parent的控件。文件对话框的工作目录为dir,只有和筛选条件filter匹配的文件才能被展示。这里作者首先定义了一个联合体,联合体一次只能承载一个非静态成员。这是一个方便的静态函数,返回用户选择的文件名称,文件名称对应的文件不必存在。该项目保存图片文件的功能是存在问题的。该函数处理是否存在保存文件的情况,这里我对作者的代码稍作改动。如果被修改过,就会弹出警告对话框,提醒要不要保存视频文件。跳到视频的一个位置,这个位置指的是第几帧。这是控件直接关联的槽函数。
2024-11-19 19:15:11
45
转载 C++中的stringstream及其应用
一个stringstream将string对象和流联系起来,使您可以像流一样读取字符串。我们将一个整数插入字符串流中,然后将该整数提取为一个字符串,该整数的值将变成一个字符串。stringstream是一个功能强大的类,用于在内存中操作字符串。(2) str( ) —— 获取并设置流中包含的字符串对象的内容。(3) << —— 将字符串添加到stringstream对象中。(4) >> —— 从stringstream对象中读取内容。(1) clear( ) —— 清除流。
2024-11-19 19:01:34
52
转载 Github上的Qt项目: QtEVM(10): 功能Open Video(O)
在上述例子中创建的QFileDialog对象最初呈现文件路径"/home/jana"的内容,并且呈现出的文件符合字符串"Image Files (*.png *.jpg *.bmp)“所给定的形式。一旦失败了,就会调用QMessageBox::warning函数,在特定的父控件前打开一个警告消息框,伴随给定标题和文本。当一个元素的外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘。从VideoProcessor的构造函数开始,stop的初始值为true。
2024-11-18 19:04:47
71
转载 Github上的Qt项目: QtEVM(5): MainWindow类
ui->setupUi(this)是由.ui文件生成的类的构造函数,这个函数的作用是对界面进行初始化,它按照我们在Qt设计器里设计的样子把窗体画出来,把我们在Qt设计器里面定义的信号和槽建立起来。这个意思很明显了,就是通过信号和槽机制让类VideoProcessor的对象video和MainWindow类的对象实现相互通信。后面的videoLabel是作者放到界面上去的。QImage::Format_RGB888表明图像以24位RGB格式被存储。前面的这个explicit显然是作者加上去的。
2024-11-15 18:51:03
89
转载 Github上的Qt项目: QtEVM(9) —— WindowHelper类
该函数返回系统时钟报告的当前时间。请注意,精度取决于底层操作系统的精度;并非所有系统都能提供1毫秒的精度。此外该函数的返回值只在一天之内增加,到了午夜一天结束时就要减少24小时。为调用线程处理等待事件,等待时间最长为ms毫秒,或者直到没有更多的事件可以处理,以较短者为准。这个类的作用就是用来延时的,先获取比当前时间晚msecs毫秒的时间,然后再延时等待,每一次等100毫秒。返回一个 QTime 对象,其中包含比本对象时间晚(或早,如果 ms 为负数)ms 毫秒的时间。重点是这里的sleep成员函数。
2024-11-15 18:00:46
59
转载 Github上的Qt项目: QtEVM (8) —— 利用Qt控件播放画面
【代码】Github上的Qt项目: QtEVM (8) —— 利用Qt控件播放画面。
2024-11-15 13:35:51
80
转载 Github上的Qt项目: QtEVM(7): C++的this指针
this指针作为隐藏参数被传入到所有的非静态成员函数中,并在所有的非静态函数体中可用作局部变量。“this”指针在静态成员函数中不可用,因为静态成员函数可以不带任何对象(仅使用类名)调用。那么现在的问题是,如果每个成员函数只有一个副本,并且被多个对象使用,那么如何访问和更新正确的数据成员呢?这意味着每一个对象获得它自己的数据成员拷贝并且所有对象共享类中函数的一个拷贝。当返回一个指向局部对象的引用时,返回的引用可以用来在单个对象上链式调用函数。首先要知道对象查看类中的函数和数据成员的。
2024-11-14 19:39:46
45
转载 Github上的Qt项目: QtEVM(6): 信号和槽
一个槽是一个为了回应特定信号的函数,Qt的控件有许多预定义的槽,但通常将控件子类化并添加你自己的槽,从而处理你自己想处理的信号。处理函数会在合适的时候调用回调函数。当一个QObject对象被删除时,会发出QObject::destroyed()信号,我们想要捕获这个信号,无论在哪个地方可能存在指向已删除的QObject的悬浮引用,以便我们可以清理它。Qt的信号和槽机制确保如果你把一个信号和一个槽连接起来,槽将会在合适的时候使用信号的参数被调用,信号和槽可以使用任何类型任何数量的参数,它们是完全类型安全的。
2024-11-14 17:34:08
64
转载 Github上的Qt项目: QtEVM(4): C++ explicit
时,3.0被隐式转换为Complex类型因为默认的构造函数可以仅需要一个参数。这是因为构造函数的2个参数都有默认值,我们可以选择不提供它们。如果隐式转换可能导致我们不想要的结果,我们可以避免隐式转换。我们可以利用explicit关键字编写显式构造函数。这是因为我们把构造函数写成了显式构造函数并且3.0将不会被Complex的构造函数转换成Complex类对象了。作者在MainWindow类的构造函数声明前加上了关键字explicit。此关键字在C++中用于标记构造函数,以防止隐式类型转换。
2024-11-14 09:45:42
41
转载 Github上的Qt项目: QtEVM (3)
首先看看类MainWindow,它是对QMainWindow的公有继承。头文件mainwindow.h。
2024-11-13 22:10:52
76
转载 Github上的Qt项目: QtEVM (2)
第一个是插件的安装目录,其位置为INSTALL/plugins,其中INSTALL是Qt安装的目录。第二个是应用程序自己的目录(不是当前目录),但仅在创建QCoreApplication对象之后。进入主要事件循环,并一直等待直到调用 exit(),然后返回被设置给 exit() 的值(如果 exit() 是通过 quit() 调用的,则返回值为 0)。将路径添加到库路径列表的开头,确保首先搜索该库。当一个 QCoreApplication 实例被销毁时,其对应的库路径将被重置为默认值。
2024-11-13 21:41:02
133
农业无线传感器Json数据解析.zip
2021-05-26
关于C++返回引用的一个疑问
2023-07-26
请问一下,modbus的rtu模式的从机只能有一个吧?
2021-06-24
关于Linux的块设备驱动
2021-05-22
Qt进行JSON解析
2021-05-18
在Windonws的Unbuntu子系统上练习网络编程遇到的问题
2021-03-25
Linux使用nfs内核服务出现异常
2021-03-05
Linux进程控制程序
2021-03-10
C语言关于qsort函数的问题
2021-02-14
Linux C的gdb调试问题
2021-02-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人