![](https://img-blog.csdnimg.cn/276dcd23ac2a4b9d94793110273ea12d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
QML / QT常用技巧汇总
文章平均质量分 76
主要分享使用QML / QT中的控件实现各种需要的特定功能
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
山间点烟雨
这个作者很懒,什么都没留下…
展开
-
53. QT插件开发--插件(动态库so)的调用与加载
在linux系统中加载动态库文件,需要使用dlopen函数和dlsym函数,其中dlopen用于打开指定路径下的so库文件,并返回一个句柄,dlsym根据返回的句柄查找so文件中暴漏在外部的接口函数,并进行调用。在使用QT进行插件库的开发之后,还需要将这个插件库程序生成的so动态链接库加载到主程序框架中进行使用,才能达到主程序的模块化开发的效果。中介绍了如何在QT中开发插件库,并提供外部接口调用。是so库暴漏出来的外部接口函数名称,两者一定要对应,否则会报错找不到指定的函数接口。是指定的库文件的路径。原创 2024-06-16 15:06:56 · 461 阅读 · 0 评论 -
52. QT插件开发--插件程序(带ui文件)的创建与编译
一般情况下,针对代码量比较小的QT程序不需要进行插件集成化开发,但是针对大型程序来说,代码结构比较复杂,使用插件开发的方式可以提高代码开发和维护效率,团队之间的分工合作也会更加的明确。创建完成后,一般会得到三个文件,其中两个头文件和一个源文件,头文件中会有一个命名为_global.h的文件,最终需要的也是这个文件,是用来将自己库中的接口向外暴漏出去,以使外部程序能够调用到这个接口。那么在得到so库文件之后,怎么才能让这个带有ui文件的库程序能够在其它主框架中进行调用并显示出来呢?原创 2024-06-16 14:28:09 · 213 阅读 · 0 评论 -
50. QT/QML中创建多线程的方式汇总
第一种:在定义类时继承 QThread 这个类,然后重写父类的虚函数 run(),将子线程需要执行的业务代码放到 run() 函数当中即可。第二种:使用moveToThread()函数将需要在子线程中执行的函数类移动到子线程中,这也是官方推荐的方式,比较灵活。首先,在QtCreator中新建一个QtQuick项目,需要实现的大致功能就是,在QML界面上点击按钮之后,会触发CPP后端的一个for循环函数(模拟耗时操作),同时将循环的次数显示在QML界面上。首先,在main.qml文件中。原创 2024-04-12 17:17:51 · 285 阅读 · 0 评论 -
49. QT中的HTTP通信与JSON数据格式解析
在请求获取网页数据时需要用到QNetworkAccessManager的get()方法,该方法需要传递一个QUrl参数,当数据访问结束之后,会触发QNetworkAccessManager::finished信号,此时可以在对应绑定的槽函数中去处理获取到的网页数据,finished信号当中会默认传递过来一个QNetworkReply类型的参数,访问到的所有网页数据都保存在这个参数当中。拿到上面的数据之后就可以自行处理了,比如简单的更新到UI界面上等。其次:利用get()函数获取网页数据。原创 2024-04-03 14:42:08 · 343 阅读 · 0 评论 -
48.Qt for Android实用小技巧
但是,为Android项目配置了这个文件之后,一些关于Android的相关设置才能进行,因为这个文件相当于开发的Android程序的配置文件。开发的Android程序一般情况下是需要获得设备的某种权限的,不然很可能操作上会遇到问题,比如读写设备上的文件权限,蓝牙状态获取权限,wifi状态获取权限等。使用Qt开发的Android程序,当把编译的apk文件安装到设备上之后,默认显示的程序名称是在qt中创建项目时的项目名称,如果想让程序安装后有自己的名称,这时就需要单独设置了。的文件夹,这个文件夹是创建。原创 2024-01-11 17:27:12 · 216 阅读 · 0 评论 -
47. QT Android针对Java代码常见接口类型的调用方式总结
可以很方便的对java代码进行调用,但是QT提供的这个类使用起来也并不是很简单,需要根据不同的java接口形式传入不同的参数,比如说在java中定义了一个无参无返回值的接口和一个无参有返回值的接口,又或者定义的还有带参带返回值的接口,不同的接口有不同的调用方式,本篇博客对常用的接口类型的调用方式进行了简单的归类,方便学习参考!先总结这些,后面有需要再追加…在QT中提供了一个接口。原创 2023-11-28 17:18:31 · 179 阅读 · 0 评论 -
46. Qt Android调用Java代码进行辅助开发 -- 框架搭建
在Qt中提供了调用Java代码的接口,比较方便。然后创建一个CPP文件用于辅助QML端调用java代码,本例创建的.cpp文件命名为javahandler.cpp,在QT中提供了一个接口。,注意从这个文件夹开始,文件夹的名称就是后面java代码的包名了,这个包名是要添加到java代码中的,比如java代码所在路径为。此时已经创建了一个java文件,还需要将这个文件的设定为启动时自动加载的默认文件,回到之前的android配置文件中,点击下图中。文件夹,多出了其它的一些文件,这些多余的文件是因为创建。原创 2023-11-22 14:23:37 · 204 阅读 · 0 评论 -
44. Adb调试QT开发的Android程序实用小技巧汇总
一般在QT程序中如果出现了BUG,都会尝试看一下某个变量值的状态,使用 console.log() 输出一些信息方便自己快速定位出错的原因。不像在linux或者windows系统中,可以利用QtCreator软件本身进行一些调试,安卓应用一旦在系统中安装后,如果运行中途出现什么BUG,定位问题所在很麻烦。关于android调试,在没有终端的情况下,也可以使用弹框的方式进行调试,就是自定义一个弹框显示的qml控件,把需要输出的调试信息显示到这个控件上,以弹框的形式显示出来。原创 2023-11-15 11:13:27 · 380 阅读 · 1 评论 -
43. QT客户端中使用TCP进行高频率的发送消息导致服务端接收信息不完全问题
所遇场景:在嵌入式开发中,一般情况下客户端和服务端均在一个工控机系统内,此时两者的通信实现如果采用TCP的方式,通信频率的高低对于信息的接收影响不是很大,在QT中开发的客户端使用TCP发送的指令,在服务端能够完整的接收。**第三步:**将指令集进行分割,并取出第一条指令(不出意外,如果上一个指令集的最后一条指令是不完整的,那么这一次的指令集的第一条指令也是不完整的,两个不完整的指令组合在一起就是完整的指令),将第一条指令和上面缓冲对象保存的不完整指令进行拼接,组合成完整指令。原创 2023-10-30 11:09:26 · 486 阅读 · 0 评论 -
42. QT中开发Android配置QFtp功能时遇到的编译问题
此问题仅适用在QT中开发Android程序时,需要适用QFtp功能的情况。一般情况下,如果开发的是Windows或者Linux系统下的程序,可能不会出现该问题。将和QFtp相关的代码文件,单独放到一个文件夹中,命名必须是。然后再添加到工程项目中进行使用,即可解决上述的问题。文件是空文件,在android环境下无法正常编译。根据报错信息可以看到,是因为。原创 2023-10-10 14:15:56 · 225 阅读 · 0 评论 -
41. Linux系统配置FTP服务器并在QT中使用QFtp实现文件上传
经过上述步骤的操作,linux系统即可被有ftp功能的客户端连接到,实现不同系统的文件互传。此案例以在windows系统中开发的qt小程序为例,连接虚拟机中的linux系统,并添加文件上传功能。这篇博客主要记录一些在Linux系统中搭建FTP服务器时踩过的一些坑,以及在使用QFtp上传文件时需要注意的问题。在QT中使用开发ftp的功能,最直接的方式是把下载的。使用上述命令安装后,系统中会有一个默认的配置文件。直接添加引入到项目中,主要包括四个文件,分别为。案例部分介绍的比较精简,详细的可以看博文。原创 2023-09-20 16:30:20 · 677 阅读 · 0 评论 -
40. QML中使用Settings类保存一些设置时的注意事项
软件开发中一些参数设置有时可以使用数据库来保存这些变量,但在QML中提供了一个Settings类,可以轻松实现一些简单数据的保存。它的实现原理是在指定文件夹内或者默认文件夹内创建一个**.ini**结尾的windows系统文件,为系统的初始化文件,在其中保存数据,软件启动时会首先在这个文件内调用相关参数变量进行使用。注意:在第一次设置属性时,一定要先考虑好属性的值,因为一旦设定,修改起来就比较麻烦比如在文件中写入下面的代码:软件运行后会发现在项目build文件夹下会生产一个配置文件,打开如下图所示:原创 2023-08-24 17:14:31 · 301 阅读 · 0 评论 -
39. Linux系统下在Qt5.9.9中搭建Android开发环境
安装完成后会在当前安装目录内出现一个新的文件夹,依次进入目录**/Tools/QtCreator/bin/**,找到其中的qtcreator可执行文件,执行这个文件即可打开qt的开发工具。大致安装的步骤如下:①安装Qt5.9.9,②安装jdk,③安装ndk,④安装sdk,⑤在qt中配置前面安装的环境路径。qtcreator的运行,需要以超级用户的方式进行运行,否则sdk的路径可能无法访问。在上图中进行相关组件的选择,因为配置的是android的开发环境,所以上面。至此,sdk安装完毕!原创 2023-07-26 17:17:00 · 1167 阅读 · 0 评论 -
27. Qt5.15.2在Windows下搭建Android开发环境
Qt5.15.2在windows中配置android环境原创 2023-03-22 11:22:14 · 1201 阅读 · 1 评论 -
38. QT在工控机Linux系统上调试机器人注意事项
如果只是手动更改了文件夹的名称,而在QtCreator中的配置中没有更改路径名称,则在代码编译时QtCreator会因为找不到路径的原因,它会自定按照原来的路径重新创建新的文件夹进行保存,那么此时如果我们需要拿到编译后的可执行文件就需要去实际项目编译保存的路径去找,否则很容易出错导致自己想要的程序不是最新编译的。解决这个问题的终极方式就是在QtCreator编辑器中手动指定编译文件的保存路径,如下图所示,在下图的方框中指定编译文件的保存路径,每次编译完成后,此路径下的编译文件才是对应最新的结果。原创 2023-07-12 17:38:46 · 529 阅读 · 0 评论 -
37. QT中使用QFtp实现文件传输2 -- 远程服务器文件或文件夹下载到本地
网上很多关于使用QFtp这个类实现文件或者文件夹的远程服务器上传的案例,但很少有关于如何下载文件,下载整个文件夹的案例甚至更少,本篇文章中使用到的方法,在下载单个文件是比较简单的,而在下载整个文件夹时采用比较曲折的方式,原因在于ftp整个类如果依然采用递归的方式去获取远程服务器中文件夹中的信息,会造成QT中信号槽函数的多次连接,出现问题。当中,当这一步骤执行完毕后,需要去遍历这个容器,每获取一个文件夹路径,就要根据这个路径的文件夹相关信息在本地保存路径中创建相同名称的文件夹,然后创建新的临时辅助。原创 2023-07-03 16:51:26 · 1038 阅读 · 0 评论 -
36. QT中使用QFtp实现文件传输1 -- 本地文件或文件夹上传到远程服务器
在对ftp的源码进行编译后,得到的文件中其实有很多功能函数提供给我们使用,为了对源代码结构进行保护,在自己项目中可以在源代码的基础上进行二次封装,创建自己的ftp功能类。本项目中创建了一个ftpUpload//上传单个文件 Q_INVOKABLE void upLoadSingleFile(QString localFilePath , QString remoteFilePath);原创 2023-07-03 14:22:57 · 1185 阅读 · 1 评论 -
35. QT中执行linux命令或者shell脚本
Qt在linux系统中进行软件开发时,有时需要通过qt调用命令行终端执行一些命令,可以比较快速方便的实现某些功能。在qt中调用命令行终端,相当于启动了另外一个应用程序,此时可以借助Qt提供的辅助类。下面的脚本功能是在指定路径创建一个文件夹,并在这个文件夹里创建一个文件(文件夹和文件名都是从Qt端传输过来的)来实现,当然也有其它的实现方式,因为QProcess使用有很多优势,所以本文只记录这一种的简单使用方式。在shell脚本中,如果执行的命令牵扯到创建目录或者文件之类的,最好加上。原创 2023-06-13 11:22:06 · 2844 阅读 · 2 评论 -
34. Linux系统下打包qt应用程序
使用超级用户打开,即不要使用su模式启动终端,终端打开后直接运行qtcreator.sh文件),原代码中如果遇到找不到库文件就会警告并停止,本人实际使用时是希望将能找到的拷贝完成,所以修改了对应代码,这个看个人需求进行修改。命令找到对应文件名称的具体路径,然后将其所在的文件夹整个复制到打包程序所在的文件夹内,一点点把所有缺失的都找到就可以了。此时就需要我们手动的去找到这些库,然后把这些库文件复制到打包程序新建的文件夹内。编译完成后,进入编译生成的文件夹内,此文件夹内会生成一个名为。原创 2023-05-31 13:35:37 · 1420 阅读 · 0 评论 -
33. QML中的常用变量和类型转换
对该对象的对象原型的引用。**toString()**返回对象的字符串表示,在QML中,很多Qt提供的类型,如 Rectangle,toString()方法返回其对应的C++类型名字或QML类型名字。**hasOwnProperty(property)**判断对象是否有某个属性,property 为字符串,比如root.hasOwnProperty (“width”)**var:**可以定义为任意类型的值,可以随时改变变量所存储的数据类型。,使用**typeof()**函数可具体查看某个变量的类型。原创 2023-05-30 14:34:32 · 1081 阅读 · 0 评论 -
32. QML仿制思维导图系列03 -- 添加连线功能
当小箭头的鼠标控制区域发生移动后,要更新绘图区域的尺寸(否则当节点产生后,若节点为移动,仅拖拽小三角形,无法绘制完整连接线)和鼠标控制区域的位置(否则当鼠标松开后,无法再对连线末端的箭头进行拖拽),其位置应与鼠标箭头位置保持一致。大致思路就是在右侧三角形上面设置一个鼠标控制区域,当拖动这个区域时,让画布重新绘制,此时重新绘制的内容要包括根部的小三角形,连接线(三次曲线)和线顶端的小箭头。本系列文章最终目的是利用QML设计一个类似思维导图的小软件,可以基本实现节点之间的连线问题。思维导图第一版最终效果。原创 2023-05-12 11:42:23 · 765 阅读 · 1 评论 -
31. QML仿制思维导图系列02 -- 绘制初始三角形
大致思路就是在产生节点时,要首先在节点的右侧绘制一个三角形,此三角形为起初的三角形,并在这个三角形上面设置一个鼠标控制区域,当拖动这个区域时,让画布重新绘制,此时重新绘制的内容要包括根部的小三角形,连接线(三次曲线)和线顶端的小箭头。经过第一步之后,每次产生的新节点都会在其右侧绘制一个小三角形,但是在窗口中中拖动节点时会发现绘制的三角形并不能跟随节点一块移动,这是因为绘制三角形所需要的坐标点未随着节点移动而发生变化。很关键,否则将出现非常奇怪的现象,读者可以将代码注释掉尝试一下!思维导图第一版最终效果。原创 2023-05-11 17:01:54 · 563 阅读 · 0 评论 -
30. QML仿制思维导图系列01 -- 搭建基本框架
利用QML设计一个类似思维导图的小软件原创 2023-05-08 14:01:59 · 660 阅读 · 1 评论 -
29. QML实现抽屉式选项窗口
仿照unity中的界面,使用QML实现抽屉式窗口设计原创 2023-04-20 14:20:35 · 1027 阅读 · 0 评论 -
27. 使用XmlListModel加载XML数据供ListView、GridView使用
listview结合gridview设计抽屉式菜单栏,并在其中学习使用xml数据原创 2023-03-27 15:21:05 · 348 阅读 · 0 评论 -
26.在QML界面中加载外部程序Unity游戏(外部程序可随意指定)
showUnityWindow***,这个类是辅助加载外部程序的,在其中会用到。原创 2023-03-19 13:28:01 · 1041 阅读 · 0 评论 -
25. 在QWidget窗口中嵌入QML界面
QML开发界面是最近才开始流行,在之前的老项目中一般都是使用QWidget进行开发,其界面设计不是很美观,但能够实现的功能是挺多的,这些是QML无法实现的。如果想在QWidget的基础上对界面进行美化,则可以将QML界面嵌入到QWidget当中进行使用。原创 2023-03-18 22:08:52 · 1896 阅读 · 0 评论 -
24. 在QML界面中嵌入QWidget窗口
目前QT官方主推的界面开发方式是采用QML进行界面设计,但在QML未流行之前,很多的项目都是采用QWidget开发的,把之前的代码全部转换为QML代码显然工作量非常大,如果能将QWidget窗口嵌入到QML界面中,那么开发效率将提高很多,且QML无法实现的功能也能借助于QWidget框架进行实现。原创 2023-03-17 15:40:51 · 4373 阅读 · 15 评论 -
23. 适当位置弹出自定义ToolTip
此文章写了一个小案例,不管是哪一个控件,根据需求,当响应到某一个信号时,都可以在控件的附近弹出对应的提示信息。原创 2023-02-13 10:07:50 · 457 阅读 · 0 评论 -
22. QML与C++交互---C++调用QML中的函数
在QML与C++混合开发时,QML界面元素可以通过某种方式去调用C++中的函数,但是,在某种情况下也需要在C++端去调用QML中定义的函数,完成相应的功能,本篇文章将简单介绍几种方式进行实现。原创 2023-02-24 15:08:47 · 964 阅读 · 0 评论 -
21. QML与C++交互---C++注册函数和属性供QML使用
在自定义类之后,需要将该类注册到QML中进行使用。而类中的成员函数和变量有时也需要在QML中能够方便的调用,本文简单介绍使用 Q_INVOKABLE 和 Q_PROPERTY 两个关键字实现这种操作。原创 2023-02-10 17:07:38 · 192 阅读 · 0 评论 -
20. QML与C++交互 --- 注册自定义类到QML中使用
QT做软件开发一般有两条线路:第一:使用 Qt Widget ,这种方式不管是界面设计还是后端逻辑功能的实现都是使用C++语言实现的,能实现的后端功能较多,但设计的前端界面美观程度不够;第二种是使用 Qt Quick 进行开发,这种方式使用 QML 语言进行界面的快速设计,同时使用 Javascript 实现基本的交互功能,界面美观程度较高,但是功能实现较弱。所以,本文将要介绍如何利用 QML 与 C++ 进行混合开发。原创 2023-02-08 13:50:43 · 461 阅读 · 0 评论 -
16. QML中信号以及使用方法
在QML中,按照信号形式或者信号的响应方式,大致可以将信号分为三种。第一种是控件本身自带的一些信号,本文统称***自带信号***,第二种是在控件本身的属性发生变化时,也会触发一种信号,本文统称为***属性信号***,第三种是我们根据功能需求,自己定义的一种信号,本文统称为***自定义信号***。原创 2023-02-03 14:24:07 · 680 阅读 · 0 评论 -
19. 利用Loader和Component重复使用其他页面中动态生成的组件
在某个界面 ***M*** 中,我们需要使用***动态创建组件***的方式来生成一个自定义的控件或者页面 ***A*** ,同时会在这个新生成的页面 ***A*** 中绑定一些数据之类的内容,一般情况下,当不需要这个页面时,我们会对其使用 destroy() 进行销毁。但是,在某些情况下我们需要在其他界面 ***N*** 中也要使用这个动态创建的组件 ***A*** (注意:此时的组件已经在某个页面 ***M*** 中创建完毕),且要保留 ***A*** 里面的完整信息,如果在要使用的这个页面 ***N**原创 2023-02-02 18:05:38 · 150 阅读 · 0 评论 -
18. Text文本竖直或横向自动切换
在使用Text控件显示文字时,默认都是横向排布的,在特殊情况下,需要将文字方向编程竖直显示,即可用到此方法。原创 2023-01-31 14:59:59 · 847 阅读 · 0 评论 -
17. state和transitions实现控件的状态变换
在界面设计当中,当布局从一种状态变换为另一种状态时,有时其内部控件的排布或者尺寸,颜色等属性均需要随时进行变换,此时就可以通过本文方法进行实现。原创 2023-01-29 17:54:09 · 139 阅读 · 0 评论 -
13. QML自定义属性绑定及向外暴露
自定义属性绑定及向外暴露原创 2023-01-27 10:48:05 · 591 阅读 · 0 评论 -
QML_JS常用知识点总结
JavaScript在QML中经常使用的语法原创 2023-01-24 16:48:47 · 444 阅读 · 0 评论 -
15. QML控件拖拽并实现自动吸附功能
控件的拖拽和自动吸附到指定位置原创 2023-01-19 18:05:39 · 1216 阅读 · 0 评论 -
14. ListView中使用setProperty和hasOwnProperty方法动态更新数据
使用setProperty和hasOwnProperty方法动态更新ListView视图数据原创 2023-01-18 17:35:48 · 208 阅读 · 0 评论