版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
在上一篇博客中已经实现了一个简单的插件和测试程序的编写,但是插件跟应用是分开独立的工程。实际应用开发中需要把相关的库和头文件打包到一个工程中,如下图所示,这样比较方便调试开发,也为创建跨平台工程提供了便利。
最近在项目测试中,发现了关于Qt - UI分辨率自适应的问题。从大小屏幕互相切换的问题。也引发了关于屏幕检测的问题。其中关于字体还有图片的自适应,需要在QApplication,初始化完成之后在进行配置。
实际项目中经常需要获取当前系统磁盘或者指定磁盘的使用情况,下面使用QT里的QStorageInfo 类获取磁盘信息,得到磁盘容量和使用情况。
之前我使用在桌面版本Qt实现了肺炎疫情监控平台:基于Qt的新冠肺炎疫情数据实时监控平台(开源小项目)。既然Qt是跨平台的,正好手里有一块iMX287A的开发套件,含一块4.3寸的显示屏,那么能不能在嵌入式平台实现一下呢?
在Window系统上,打开我的电脑,我们就能够看见系统的每个磁盘的可用空间以及总空间,如下所示:
在实现类似于Free IP Scanner 2.1的Ip扫描器软件中,会用到ping命令。如果使用Qt编程实现,主要会用QThread、QProcess这两个类。关于这两个类的具体用法可以查阅Qt助手或者QT官网。
breakpad是一组用于实现崩溃报告系统的客户端和服务器组件。Chromium的Breakpad是目前Native崩溃捕获中最成熟的方案。它是一套完整的工具集,从Crash的捕获到Crash的dump,都提供了相对应的工具。它记录了崩溃时的.dump文件,无论我们是在本地或者发送到服务器端,都可以用相对应的工具来解析.dump文件帮助我们查找C和C++堆栈踪迹。
本编利用Qt实现一个网络摄像头功能,包含一个服务端和一个客户端,服务端用于将USB摄像头转换为一个IP摄像头,当有客户端连接时,将其捕获到的图像通过TCP发送出去;客户端运行在Linux板子上,用于查看摄像头的实时画面。
在QT for Windows 下编程时,经常因为一些中文路径、带空格的路径导致一些问题出现。
New -> Application -> Qt Console Application -> Choose
该软件里推流和视频保存使用FFMPEG库完成,界面框架采用QT,视频和音频可以同步推流和录制,FFMPEG本身支持跨平台编译开发,QT也支持跨平台,在Android、Linux、windows都运行良好,只需要在不同平台编译对应的ffmpeg库即可,逻辑代码部分通用。
既然Qt是跨平台的,那么能不能在嵌入式平台实现一下呢?最近刚好看到,ST官方在开展创客大赛活动,就买了米尔科技的YA157C开发板移植一下。
上面看起来代码有点多,我们再看看Qt4版本下QT_NO_DEBUG_OUTPUT宏的实现:
一般我将ctrl+alt+L或者shift+alt+L来展开和折叠所有代码块,方便快速定位函数位置。(这个需要自定义)
SQLite 是一种轻量级的嵌入式关系型数据库管理系统,它是一个开源的、零配置的、自包含的、事务性的 SQL 数据库引擎。SQLite 的设计目标是简单、高效、可靠,适用于各种大小的应用程序。
有这样一个需求,通过配置 QT,在 linux 下实现显示我所想要显示的图片,实现的方式是我可以在命令行将图片的路径作为入参传入进去,从而对其进行显示,在之前的文章中已实现了在板子上运行 QT5 程序,此需求要自己写个 QT 程序,且需要对 buildroot 进行裁剪支持一些常用的图片格式即可。
我在github仓库里面看到之前遗留的Qt_Demo,把文章相应的工程文件提交到仓库里面去,上次的简易聊天室也同步过去了,以及这篇文章的两个线程Demo。
当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据的存储,并且支持数据的增删改查操作。其中,宠物投喂器上传的数据包括投喂间隔时间、水温、剩余重量等参数。
事件是应用程序内部或者外部产生的事情或者动作的统称。在 Qt 中使用⼀个对象来表⽰⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。当用户按下⿏标、敲下键盘,或者是窗⼝需要重新绘制的时候,都会发出⼀个相应的事件。⼀些事件是在用户操作时发出,如键盘事件、⿏标事件等,另⼀些事件则是由系统本⾝⾃动发出,如定时器事件。常见的 Qt 事件如下:
事件订阅可以拿到文件长度、播放进度、播放状态改变等信息,vlc的事件订阅机制封装的比较友好,只需要先创建一个事件管理器,然后逐个订阅自己感兴趣的需要的事件,不感兴趣的可以不要订阅,只有订阅了的事件才能在事件回调中拿到,所以如果在事件回调中发现一些事件没有拿到,首先要检查下到底订阅了没有,所有事件的枚举在libvlc_events.h头文件中可以查阅到,都用的是通俗易懂的全英文单词描述,有过基本英语能力的开发人员都能看懂。
在继承了 QWidget 窗口类以后,我们可以实现很多父类提供的虚函数,其中就包括鼠标的诸多消息处理函数,比如 mousePressEvent(鼠标单击消息)、mouseReleaseEvent(鼠标弹起消息)等等,这些虚函数我们可以通过 Qt 的帮助文档查看,如下:
总结一下一些用到的模板,后续会有补充。 1. 链接第三方库 ①unix与Windows使用相对路径链接第三方库模板 unix{ contains(QT_ARCH, i386){ LIBS += -L$$PWD/Lib/Qsci/linux_x32/lib -lqscintilla2_qt5 INCLUDEPATH += $$PWD/Lib/Qsci/linux_x32/include } contains(QT_ARCH, x86_64){
1991年由Qt Company(奇趣)开发的跨平台C++图形用户界面应用程序开发框架,GUI程序和非GUI程序。优点:一套源码在不同的平台通过不同的编译器进行编译,就可以运行到该平台上目标机。面向对象的封装机制来对其接口封装。
如果是一个小白,那么该如何学习Qt呢?接下来我从自己的学习经历中总结一下,希望对初学Qt的同志能有一点儿帮助。
随着程序写的逐渐变多,或多或少的我们都会使用别人写好的库;或者我们不想让别人看到我们的一些核心程序,可以将核心程序封装成库。本次和大家分享的是在Ubuntu下使用Qt生成共享库以及在Qt中链接共享库的方法。
[],标识一个 Lambda 的开始,这部分必须存在,不能省略。外部变量访问方式说明符只能使用定义 Lambda 为止时 Lambda 所在作用范围内可见的局部变量(包括 Lambda 所在类的 this)。外部变量访问方式说明符有以下形式:
下面代码调用FFMPEG库,读取摄像头的一帧数据,转换为RGB888,加载到QImage,再显示到标签控件上。
github 首页地址: https://github.com/wang-bin/mdk-sdk
本文转载自豆子的Qt 学习之路2的博客Qt 学习之路 2(64):使用 QJsonDocument 处理 JSON
QList类、QLinkedList类和QVector类常常使用到的Qt容器类有QList、QLinkedList和QVector等。在开发一个较高性能需求的应用程序时。程序猿会比較关注这些容器类的执行效率。下表列出了QList、QLinkedList和QVector容器的时间复杂度。
本章主要内容如下: 1) 窗口组件(QWidget) 2) QT坐标系统 3) 初探消息处理(信号与槽) ---- 窗口组件(QWidget) 介绍 Qt以组件对象的方式构建图形用户界面 Qt中没有父
为了帮助准备过渡到Qt 6,在Qt 5.15版本中已将许多将从Qt 6.0中删除的类和成员函数标记为已弃用。除非您在项目中定义QT_NO_DEPRECATED_WARNINGS,否则对于使用任何不推荐使用的API的代码,您都会收到编译器警告。这些警告将说明要改用哪个API。要完全禁用所有不推荐使用的API,请使用QT_DISABLE_DEPRECATED_BEFORE宏。
除了监控专用的摄像头以外,有一些应用场景用的还是USB摄像头,甚至还有一些单片机或者开发板上用的CMOS摄像头,而Qt在嵌入式领域应用相当广,所以用Qt来读取加载显示USB摄像头和CMOS摄像头,也是非常多Qter做过的事情,qt本身就封装了qcamera类,专用于本地摄像头的读取显示,这个类主要是在windows系统和安卓系统比较好使,在嵌入式上歇菜,而且安卓上widget的qcamera也不好使,要用qml的camera才好使,所以开发人员很多时候,就是在找坑填坑,找到一种最佳的适中方案,比如我自己做过的一个手机app,需要调用手机的摄像头,前置后置还要能切换,抓图做一些处理,用的就是qml嵌入到widget,通过信号槽来通信。
教大家如何屏蔽printf,cout,qDebug等打印信息。 1. MSVC编译器 将两个“/”连接成“//”实现注释是MSVC编译器扩展功能。 #define cout /##/ #define printf /##/ #define qDebug /##/ 启用宏替换后变为注释语句 printf("Hello world!"); 相当于: //("Hello world!") cout << "Hello world!"; 相当于: // <<("Hello world!") qDebug()
❝经常使用QDebug进行打印字符串,其实我们还可以使用QDebug拼接字符串。❞ QString s; QDebug(&s).nospace() << "PI:" << 3.14 << __FUNCTION__ << __LINE__; qDebug() << s; //output: "PI:3.14main10" 不止是拼接字符串,还能拼接大部分的Qt对象,比如: QString s; QDebug(&s).nospace() << QSize(5, 5) << QPoint(1, 1) << Q
QFile Qt中所有与IO相关的类都继承于QIODevice,继承图如下所示: 其中QFile类便是用于文件操作的类 在QT中,将文件当做一种特殊的外部设备对待(比如:串口,usb等就是外部设备)
本文转载自:http://blog.sina.com.cn/s/blog_671732440100uwxh.html
Qt对象之间可以存在父子关系 继承于QObject类或者其子类的对象,都称为Qt对象 当指定Qt对象的父对象时 需要通过setParent()成员函数来设置对象间的父子关系 子对象将会把自己的指针地址保存在父对象的children List链表里(因为父对象可以拥有多个子对象) 子对象内部会有一个指向其父对象的指针,可以通过parent()成员函数查看 代码试验 需要用到的函数: void QObject::setParent ( QObject * parent ); //设置为parent对象为
Qt提供了一系列标准值类型,这些标准值类型用于提供丰富而有意义的API。这些类型与元对象系统集成在一起,使它们可以存储在QVariant对象中,在调试信息(如:qDebug)中写出,并在信号槽通信中传递。
Qt提供QThread类以进行多任务处理。与多任务处理一样,Qt提供的线程可以做到单个线程做不到的事情。例如,网络应用程序中,可以使用线程处理多种连接器。
10亿次QLst的at与[]的运行速度的比较。 ---- 环境 windows10系统 Qt4.8.7(gcc 4.9.2) Qt5.12.3(gcc 7.3.0) Qt Debug构建 10亿次操作比较 ---- 对比 单位ms 源码最后附录 Qt版本 参考 at const at [] const [] 4.8.7 14 278 279 639 629 5.12.3 14 325 322 418 411 ---- 分析 Qt5.12.3整体运行速度快于Qt4.8.7; 无论是Qt4.8.7或是Qt5.
qFuzzyCompare 是 Qt 提供的一个函数,用于比较两个浮点数是否相等。由于浮点数在计算机中的表示存在精度问题,直接使用 == 运算符比较两个浮点数可能会因为微小的舍入误差而导致不准确的结果。qFuzzyCompare 函数通过引入一个小的容差范围来解决这个问题,使得在一定精度范围内相等的浮点数被认为是相等的。
原文链接:https://yq.aliyun.com/articles/119861
之前给大家分享了一个使用python发图片数据、Qt server接收图片的Demo。之前的Demo用于传输小字节的图片是可以的,但如果是传输大的图片,使用socket无法一次完成发送该怎么办呢?本次和大家分享一个对大的图片拆包、组包、处理粘包的例子。
之前文章写过Linux C Socket 收发Json数据,最近用Qt Server实现了一遍。给我自己的感觉就是cJSON接口与Qt封装的一些接口是共通的:Qt 封装了QJsonObject来对Json对象操作,如增删改查;封装了QJsonDocument来进行一些序列化与反序列化的操作(可能不准确)。
第一个程序 - Hello QT 首先写main.cpp: #include <QApplication> #include <QMainWindow> #include <QPushButton> int main(int argc, char* argv[]) { QApplication a(argc, argv); // Qapplication表示一个应用程序,而它的成员函数exec()则用来执行程序以及消息处理 QMainWindow w; //
领取专属 10元无门槛券
手把手带您无忧上云