自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

原创 一个 .cpp 引发的编译错误惨案

正在我一筹莫展的时候,领导发现了问题所在,原来 IMachine 这个类作为一个接口类,居然有一个 IMahine.cpp 文件,而该文件中只存在一个析构函数的实现,再无其他内容。正在一切就绪的时候发现好多的错误,刚开始以为是没有引用头文件目录找不到,然而在看到 pro 中对引用后就知道不是这个问题。奇怪的是在 Windows 下编译运行也是正常的,按照这种逻辑想下去完全没有头绪。

2024-04-23 09:02:01 249

原创 Qt 运行 Android 程序时找不到 Toou2D 库闪退

将编译生成的 Toou2D 文件夹拷贝至 D:\software\Qt\5.15.2\android\qml 目录下。程序闪退,错误信息如下,找不到库。

2024-04-23 09:00:00 42

原创 Qt Android 动态加载动态库失败

经过了七七四十九个劫难后程序终于稳定运行起来了,正当我以为完美时,问题又找上门了,QML 里面的二维码图片加载不起来了,这个图片还不是本地图片,是实时生成的。开始的时候并没有下面日志输出,我以为是 dynamic_static 转转失败了,让我一顿疯狂的找错误,当我加上加载错误时输出错误日志才恍然大悟,是缺少了库。在 UPCNC3.pro 中添加 websockets 模块。

2024-04-23 08:59:01 23

原创 Qt Android 申请写文件到内部存储

在项目中我们有一个软件配置文件,在软件更新一些配置后需要将配置信息保存到配置文件中,Windows 下是将配置文件保存到软件当前目录下,但是 Android 环境下无法保存到程序当前目录,最终只能将配置文件保存到内部存储中(平板的存储器)。Android 写文件是需要申请权限的。

2024-04-22 11:27:09 414

原创 Qt Android 无法加载 assets 目录下 lua 校准脚本

项目的校准脚本在打包的时候都放在 assets 资源目录下,但是 assets 是压缩包,Android 下虚拟目录,所以 Qt 可以加载 assets 目录下文件,但是 C 语言的 fropen 函数却无法打开。为了实现这个目的,需要修改原有的逻辑,程序在运行时将判断该存储器中是否存在校准脚本,如果不存在则从 assets 资源目录下复制过来。为此只能将所有的脚本文件移动到内部存储器中保存,然后从内存存储器中加载校准脚本可以使用。C 语言使用 fopen 无法打开 assets 目录下的文件。

2024-04-22 11:25:59 448 1

原创 QML 中引用 js 文件闪退问题

在移植 Android 中遇到这样一个引用兼容性问题,起因是这样的,Windows 版本的采用了 QML 分离的方式加载,而 Android 版本又采用了 qrc 的方式。而 Qt 中的机制是采用 QML 分离方式时则使用相对路径的方式引用 js 文件,而采用 qrc 的方式则需要使用 qrc 的方式引用 js 文件。且两种方式不能同时使用。在项目开发时使用了 Windows 下 QML 分离的方式加载,在 qml 文件中使用相对路径的方式引用了 js 文件,在 Android 环境下编译运行时程序闪退。

2024-04-19 15:21:20 505 2

原创 程序闪退,找不到 Toou2D 模块

本来该目录存在 Toou2D 模块,但是由于修改过,导致我一直以为没有问题,后来将原来的删除掉,再将重新编译后的目录复制进去就可以了。Qt 安装目录下的 D:/software/Qt/5.15.2/android/qml 下更新 Toou2D 模块。

2024-04-19 15:19:35 250

原创 dynamic_cast 跨模块使用失败

模块中进行转换时会失败,在本模块中没有问题。转换失败,最终确认是因为跨模块的原因。由类内部提供接口转换后返回。

2024-04-19 15:18:39 308

原创 无法接受消息中心消息问题

通过日志可以看到很多消息中心的消息都没有接收到,再一次是因为 `dynamic_cast` 转换失败的原因。

2024-04-18 13:14:01 124

原创 无法正确显示语言和语言切换

项目中使用 ts 语言文件,语言文件是放在 assets 资源目录下的。通过跟踪发现是设置进去的路径错误的,由于 `Android` 下设置的是 `assets` 相对路径,所以通过 `QUrl` 无法转换成绝对路径。

2024-04-18 13:12:22 166

原创 Qt Creator 调试控制台无法查看 log4z 的日志

重定向日志到 log4z 后无法查看打印的日志信息。

2024-04-17 09:37:53 244

原创 导致程序崩溃删除的地方

环境下直接不重定向日志,经过后期调试应该是 dynamic_static 转换失败导致。由于 Android 下没有创建文件和写文件的权限,所以导致程序崩溃。直接判断 Android 环境下返回 0。

2024-04-17 09:36:00 800

原创 Toou2D 的 TIconButton 不显示

我将 Toou2D 示例代码中 TIconButton 的例子拿过来是可以显示出来的,但是和项目中代码有较大的区别,只能一点点测试是什么原因导致。windows 下已基本完成了 UPCNC3 的功能开发,显示部分已经完成,但是移植的时候发现 TIconButton 根本显示不出来。在 svg.cso 文件中开头增加精度语句。

2024-04-16 09:09:20 472

原创 通过新建方式移植 CNC3 项目

尝试过很多种方式,Android 下都会闪退,没有办法的情况下只能以归零的心态取搞,直接新建一个项目,项目结构除了 UI 部分的放在 UPCNC 子项目下,其他不变。这样就可以慢慢的从头开始调试,经过半天的折腾,项目框架搭建完毕,并将原来的 QML 界面相关资源加载到新项目中并顺利的让程序运行起来,这样第一步就基本完成。将 QML 部分代码移植过来之后会发现界面中无法加载的图片资源,其原因是 Android 下查找资源的方式不一样。设置完下面的内容之后需要重新构建,直接运行可能无法将资源拷贝进去。

2024-04-16 09:07:43 216

原创 Qt for Android 配置 gradle

配置 gradle 版本在 Qt Android 编译时需要配置对应的 gradle 版本才能正确编译。

2024-04-15 11:20:08 503

原创 Qt for Android 开发环境

在搭建环境时开始感觉还挺顺利的,从 Qt 配置的环境里面看并没有什么问题,可真正编译程序的时候发现全是错误。最开始的时候安装了 JDK21 最新版本,然后根据 JDK21 安装 ndk, build-tools, Platform-Tools 和 Gradle,但是不管这么搞都会有编译错误。然后在换成 JDK20,依然不行,最后换到 JDK18 的时候终于可以了。需要注意的是还需要搭配正确的 gradle 版本和 gradle 插件版本。

2024-04-15 11:15:10 701

原创 项目移植介绍

Windows 版本开发基本完成后考虑在安卓平板上运行,所以首先使用 Qt Creator 对项目进行适配,然后再对移植到平板上运行。公司做了一下项目,我们平时就叫 CNC3,用于控制单个或多个加工机,而我们的加工机则是用来切削各种牙齿的。

2024-04-15 10:21:01 184 1

原创 模板函数与模板类

在合适的场合使用函数模板能够大大的提升开发的效率,例如经常使用的一个例子,求两个数的最大值。就目前使用的方法中,最大值求法有很多种,如宏定义、重载、模板。宏定义求最大值的做法也会经常见到,但是宏定义不会安全检查,如果稍微有点错误就难以发现了。可以考虑使用模板替代宏。

2024-01-22 19:45:00 52

原创 运算符重载

重载使得类变得更加方便使用,在重载时也要注意一些细节。在重载运算符时,要尽量去贴合类的常用使用习惯,而不是看有什么运算符全部重载。需要选择适合类的重载运算符。有些运算符最好要成对实现。对于单目运算符最好使用成员函数方式重载,对于双目运算符最好使用友元函数方式重载。尽量减少构造临时对象。

2024-01-19 19:30:00 58

原创 C++ 中 static 应用

在C/C++中都可以使用static关键字,但是却需要注意在C与C++的使用方法有差异。C++除了继承C中static的使用方法外还增加了新的使用方法。本次实验主要介绍static在C++中的使用方法。静态的成员在实例化对象之前已经产生,并将数据存放在全局(静态)存储区。在C++中主要新增有静态数据成员和静态成员函数两种使用方法。公有静态数据成员可以看做是作用于在类中的全局变量,而私有静态数据成员虽然其他的类无法访问,但是类的所有对象将共享该数据。而静态的成员函数可以看做全局函数来使用。静态成员函数没有。

2024-01-17 19:30:00 53

原创 友元函数与友元类

使用过Qt的同学相信都了解Qt库内部也使用了很多友元类,Qt封装了大量的类库,里面很多库是有关联性的,所以在使用的时候直接使用友元的方式,比较简单快速的解决了问题。友元函数或友元类不受权限关键字的约束,可以在类内任意位置。可以直接访问类的所有成员,包括私有成员。友元函数或者友元类破坏了类的封装性,建议少用或者不用。友元关系不可传递,即友元类的派生类不再是友元类。友元关系是单向性的,如示例代码 3 中Circle类可以访问Point类,但Point类不能访问Circle类。

2024-01-16 00:10:07 275

原创 C++ 异常处理

异常便是程序中数据出现不合理的特殊情况处理,在做项目时我们常常需要想到的是特殊的情况,只有将所有的特殊情况处理好之后程序才能很好的运行。

2024-01-10 21:26:46 450

原创 RTTI(运行时类型识别)

RTTI需要以继承为基础。RTTI基类中需要有虚函数或者纯虚函数。RTTI使用typeid和来实现。需要注意在基类向派生类转换时可能会失败。

2024-01-08 21:16:50 677

原创 纯虚函数和抽象类

纯虚函数、抽象类、接口类,这三个名词存在联系,本小节将介绍这三个名词概念、使用方法以及应用场景。

2024-01-01 18:18:55 880

原创 虚函数以及实现原理

多态可扩展行和易维护性的实用性,如果有新类型的任务时直接继承基类实现即可,并且和其他任务类型是相似的,实现起来非常方便。维护时也只需要检查相应任务类即可。提高了开发效率。实现多态的关键在于虚函数表。多态用在合适场景能提高开发效率。使用多态也有一定的限制,必须在继承时并且有类似任务时,即合适场景时使用。

2024-01-01 18:16:42 742

原创 论虚继承的作用

菱形继承是继承中一种特殊的继承,如图中类B和 类C都继承自类A,而类D又同时继承类B和类C,这样就产生了一个菱形继承,如下图。通过本小节实验,需要学习菱形继承以及菱形继承所产生的问题。学习虚继承的使用场景以及虚继承的使用方式。在实际开发中,菱形继承可能使用的并不是很多,但是一旦用到便需要注意使用虚继承。实际项目开发中,如果使用IDE环境框架,在使用现有框架的时候就要注意一下,因为现有框架很多是经过了多重继承。在开发中,最好不好使用这么复杂的继承关系。

2024-01-01 18:13:25 880

原创 多继承与多重继承

多继承与多重继承是实际开发中常会用到的,需要深入学习理解。多继承与多重继承比较好理解,但注意不要混淆这两个概念。多重继承尤为常见,在实际开发中,使用的很多框架基本都是经过了多重继承。

2023-12-25 19:39:03 355

原创 继承中的关系

使用基类作为参数传递时,直接传递产生临时变量,会耗费时间空间,而引用和指针传递不产生临时变量,所以推荐使用引用的方式作为参数传递,相对来说指针比较复杂所以不在推荐之列。临时变量调用拷贝构造函数,使用时需要注意。可以从截图中发现传递不管是基类还是派生类,其调用的都是Person类的eat函数,这也是为什么叫做isA。当派生类对象传递给基类参数时,其本质是构造一个基类对象或者使用派生类对象中基类部分。无法重载,只能隐藏,即只要同名就隐藏,而不管参数类型与个数。

2023-12-25 19:35:13 816

原创 C++ 继承方式

类的成员属性和继承方式组合后有多种访问方式,需了然于心。继承方式有public、protected、private三种,有四种写法,因为还有一种默认继承的方式。一般情况不使用默认继承的方式,直接明确继承方式,方便阅读。开发中使用public继承方式较多。

2023-12-25 19:32:39 924

原创 C++ 开发中为什么要使用继承

生活中继承是指孩子继承父亲的财产等。C++使用了这一思想,却又与生活中的继承不一样。在使用继承时,派生类是基类的子集,基类是派生类的超集,例如人类与学生类,人类是一个大的概念,学生首先是人类,其次才是学生,所以学生类可以继承人类。如果两个没有任何关系的类不存在继承关系。C++继承中,将被继承的类称为基类或者父类,将继承的类称为派生类或者子类。文章中将统称基类和派生类。被继承的类称为基类或者父类。继承的类称为派生类或者子类。继承时需要使用权限关键字public, protected或者private。

2023-12-18 22:03:22 385

原创 Makefile 应用

linux和windows下Makefile中都使用 “#” 注释。linux下使用rm命令删除文件,windows下使用del命令删除文件。本章节简单的说明了两个Makefile应用场景,但是其强大的功能远非如此。学习完本章节后,后续的课程中将使用Makefile脚本来编译程序,进而巩固Makefile的使用。

2023-12-18 22:01:09 837

原创 const 应用

const允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const。const对象只能调用const成员函数,不能调用普通成员函数。const指针和const引用对象都只能调用对象的常成员函数。普通成员函数与const成员函数可以互为重载。普通对象能调用const成员函数,也能调用普通成员函数。常对象只能调用const成员函数,不能调用普通成员函数。普通对象和const对象都可以访问公有数据成员。

2023-12-13 23:48:29 856

原创 深入对象指针

在堆上申请的内存,在使用完后一定要释放内存。this指针无需用户定义,编译器自动产生。相同类型不同对象this指针指向不同的对象。

2023-12-13 23:41:48 886

原创 深拷贝与浅拷贝

如果不实现拷贝构造函数,系统将自动生成,并且只能做浅拷贝。如果类中存在申请内存操作时一定要重载拷贝构造函数。类中存在指针数据成员时需要使用深拷贝。

2023-12-11 22:51:45 422

原创 对象与对象数组

使用对象数组时会调用每个对象的构造函数和析构函数。new与deletenew []与delete []一定要配套使用。不要越界,不管是栈还是堆,访问数组时都不要越界。对象数组指针变量本身就是一个指针。堆上实例化的数组,要注意指针使用方法。如果是做项目,要考虑使用在堆上实例化申请内存,栈空间比堆空间小很多。当对象A中有常量时必须使用初始化列表。当对象A有其他的对象B并且对象B没有默认构造参数时需要使用初始化列表。除了以上两种情况,可以不使用初始化列表,但是推荐使用初始化列表。

2023-12-11 22:49:34 793

原创 对象的生离死别

作为C++开发者,必须对内存的分区以及使用了然于心。一个好的构造函数、拷贝构造函数和析构函数可以使程序使用更加稳健。在编写构造函数时需要考虑是否使用explicit关键字修饰。推荐在编写程序时使用初始化列表的方式初始化参数。析构函数时要注意释放堆中的内存,但也要注意避免重复释放内存造成程序崩溃。

2023-12-11 22:11:17 888

原创 浅谈类的封装

封装是类的本身属性,类就是将需要的数据以及函数放在(封装)类内部,使用该类实例化的对象可以使用类内部的数据和函数,通常来说学习一样东西只要问三个问题就可以了。

2023-12-07 22:09:37 617

原创 初始类与对象

本课程是进一步对类与对象的深入认识,如何定义并实例化一个类,介绍如何使用 `C++` 标准库 `string` 类等。

2023-12-07 22:03:02 932

原创 头文件应包含什么,不应包含什么?

文章知识点来自《大规模 C++ 程序设计》。当程序具有规模的时候,编译、链接的速度跟包含的头文件有很大的关系,我们需要知道头文件中应该包含什么,不应该包含什么。

2022-09-22 10:26:10 414 1

原创 Qt for Android 控制台程序编译报错

Qt for Android 控制台程序编译报错环境系统:window11Qt 版本:Qt5.15.1安卓调试机:RK3399ProX编译错误说明Qt 创建了一个简单的界面程序,可以调试运行到开发板上。Qt 创建了一个简单的控制台程序,编译的时候报错了。错误信息:Skipping D:/software/Qt/5.14.2/android/plugins/platforms/libplugins_platforms_qtforandroid_armeabi-v7a.so due to un

2021-11-24 14:33:18 2087 3

自启动脚本

该脚本是检测另外一个程序是否正在运行,如果没有运行则启动该程序,该脚本运行在linux下,是一个死循环程序。

2018-10-25

C++常用方法

C++常用方法,数据库操作部分与JDatabase类连用,里面有常用的数据库插入,删除,查询,更新等常用数据库操作,还有获取文件夹目录,文件等。

2018-10-17

Database数据库类

这是一个DDBC操作数据库类,可以同时操作MYSQL,SQL Server,ACCESS数据库,但是具体的操作需要自己写,会在其他的示例中展示。

2018-10-17

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

TA关注的人

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