Qt 是一个跨平台的应用程序开发框架。使用Qt开发的应用程序,只需要编写一套代码,然后把这套代码放在不同平台的Qt环境去编译,就会生成可以运行在对应平台的应用程序。例如,我在Windows写了一个串口助手,这套代码不用修改,放在Linux环境下的Qt开发环境,重新编译,就可以生成可以在Linux环境下运行的串口助手,当然,Qt支持的环境有很多。不同平台下的移植,只需要修改很小一部分或者不用修改就可以直接运行。
截止至2020年8月,Qt的最新版本是5.15.0,但仍有很多资料是基于Qt4,为了避免大家误入歧途,所以写了这篇文章。
拿到开发板几天了,这几天忙着下载下我们的新的资料,主要是安卓部分的,开发板的性能很是强劲,可以跑Ubuntu图形系统,还有安卓系统。目前应该是支持安卓10了。
「下载 qt-everywhere-opensource-src-4.8.7.tar.gz:http://download.qt-project.org/archive/qt/4.8/4.8.7/」
数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,一般数据源有三种方式获取,串口、网络、数据库,至于数据规则是什么,这个用户自己指定,本设计器全部采用第一个字节作为数据来演示。
QGit是一款由Marco Costalba用Qt和C++写的开源的图形界面 Git 客户端。它是一款可以在图形界面环境下更好地提供浏览版本历史、查看提交记录和文件补丁的客户端。它利用git命令行来执行并显示输出。它有一些常规的功能像浏览版本历史、比较、文件历史、文件标注、归档树。我们可以格式化并用选中的提交应用补丁,在两个或多个实例之间拖拽并提交等等。它允许我们用它内置的生成器来创建自定义的按钮去执行特定的命令。
这两天看老师发的FFMpeg的示例(先用的是Qt4),爆了一串找不到第三方库的文件,于是我决定找找原因。 然后让Qt4气的要死。。。。。 其中还有不少门路还没理清楚,水很深啊。
上一篇文章已经打通了数据源之一的串口采集,这次要说的是网络采集,网络通信目前用的最多的是三种,TCP/UDP/HTTP,其中tcp通信又包括了客户端服务端两种,tcp通信才用了多次握手机制不丢包,但是耗费资源多而且需要建立连接。udp通信在大数据量或者网络不稳定的情况下,可能丢包,而且顺序无法保证,但是一个包的数据肯定是正确的,由于占用资源极少而且不需要建立连接,在很多场景中应用也蛮多,我个人用udp以来,也没发现过丢包的情况,可能数据量不够大或者是在局域网内的原因吧,反正用起来还是蛮爽的。http通信目前非常流行,尤其是和服务器之间做数据交互,基本上post请求然后返回一串json数据,解析对应的json数据即可。本次采用的TCP通信作为示例,其他两种可以自行拓展,也很简单的。
自从研究Qt编写自定义控件以来,一发不可收拾,越多越多人有类似的需求找我定制控件,陆陆续续写了上百个控件,目前已超过150个,于是逐渐衍生了另外一个需求,提供一个控件属性设计器,类似QtDesigner一样,可以方便的拖曳控件,改变属性,立即应用,并导出到文件方便下次直接加载,这个设计器有点像组态中的一个雏形,提供了基本的加载控件,导入导出数据,数据源绑定等。
之前就提过,Qt的属性机制强大到爆,这次的动态属性功能就是要让他爆,很难想象只要一行代码即可widget->setProperty("value", value);没错就这么简单,调用弱属性机制,可以直接控制控件中的所有属性,设计这个机制的人绝对是天才,直接跪了。至于具体底层是怎么实现的,这个可以先不管,也没有太多精力再去研究Qt的源码了,那个源码非常庞大,研究源码的时候最快的办法是搜索直接定位对应文件。本设计器除了提供文本框输入值进行动态改变控件属性以外,还提供了了滑动条、随机模拟数据、串口采集数据、网络采集数据、数据库采集数据等多种方式获取数据源。
数据库作为数据源,在很多组态软件中使用非常多,指定数据库类型,填写好数据库连接信息,指定对应的数据库表和字段,采集间隔,程序按照采集间隔自动采集数据库数据,绑定到界面上的控件赋值显示即可。使用数据库作为数据源,有个非常大的好处就是不用去写额外的通信代码,也与对方的什么语言什么平台无关,不会有扯皮的事情发生,例如通信协议不规范不准确导致解析不对的情况啊,这样就支持任意的语言和平台啦,毕竟有数据库这个中间载体过渡,而且任何语言任何平台都会有数据库,都兼容,所以采用数据库作为数据源不失为一种很好的方案,可以专注于软件功能的持续集成。
介绍Qt4和Qt5获取Windows系统事件的方法。 Qt4版本的实现 方法1: 通过继承QWidget的类中重新实现winEvent接口,以接收在消息参数中传递的本机Windows事件。 bool QWidget::winEvent(MSG *message, long *result) 方法2: 通过继承QCoreApplication的类中重新实现winEventFilter接口,以接收在消息参数中传递的本机Windows事件。 bool QCoreApplication::winEventFilte
上一篇文章把插件加载好了,并且把插件中的所有控件都显示到了列表框中,这次要做的就是实现拖曳控件的功能,用户选择一个控件拖曳到画布上,松开,在松开位置处自动实例化该控件,这个需要用到dropEvent和dragEnterEvent事件,重新实现这两个事件,对拖曳的对象进行过滤并调用函数实例化该控件,在实例化该控件的同时实例化控件跟随控件以便拉伸调整大小和位置。这里需要注意的是dragEnterEvent是必须的,很多人以为拖曳只要实现dropEvent就可以了,其实不行的,没有效果的,需要先dragEnterEvent来过滤好了执行event->accept()才行,不然根本没有效果,很多人尤其是初学者都挂在这里,我就是在这里摔了一跤,好疼!
在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需要研究qtpropertybrowser的源码了,通过研究发现,在QtObjectControllerPrivate类中负责对控件的属性名称进行遍历,然后发送到QtVariantPropertyManager进行统一的管理,那只要将这里的属性名称进行映射就行了,对应的英文到中文或者其他语言都可以,甚至枚举值的下拉框也可以在这里换成中文的。曾经想过用翻译的机制,后面发现路很漫长,而且最终还是需要映射转换,看过QtDesigner的源码,里边最终也是将翻译文件中的对应项转换成中文的。
最近想装个双系统,看了一下linux发行版的排名,manjaro吸引了我的注意,准备装来试试看。装好系统起来后发现没有支持中文输入,用了这么多输入法还是搜狗的最好用,决定装sogou输入法了。
在不改变和影响原有语法的前提下提高qml开发效率。有一些qml项目兼顾与Qt4与Qt5版本,由于QML不用编译,但解释在运行时,使预处理指令不能用于直接通过QML。一般采用的方法是直接改文件内容,也就仅限于部分的修改。如: Qt4版本下:
加载插件是整个属性设计器的第一步要打通的功能,插件中的控件都加载不了,后面就别搞别玩下去了没法玩的,要从一个动态库中加载出来控件,肯定需要用到反射机制,以前做.NET开发的时候就觉得反射这个东西相当强大,居然可以读取DLL加载出来控件,现在用Qt,发现Qt也有反射机制,也许这东东可能各大开发语言平台都具备吧,Qt反射对应的类叫QMetaObject,着实强大,其实整个Qt开发框架也是超级强大的,本人自从转为Qt开发为主后,就深深的爱上了她,在其他跨平台的GUI开发框架平台面前,都会被Qt秒成渣,Qt的跨平台性是毋庸置疑的,几十兆的内存存储空间即可运行,尤其是嵌入式linux这种资源相当紧张的情况下,Qt的性能发挥到极致。
之前在PC机上用QT编译数据库,已经成功,本来以为直接移植到ARM上就可以用的,没想到遇到了莫名其妙的问题,到现在都搞不定。所以暂时先用sqlite3插件的方法完成任务再说,希望有用QT做数据库的大牛们帮忙看看问题所在,也随便记录一下sqlite3插件的方法。
<<C++ GUI Programming with Qt4>>、<<Qt及Qt Quick开发实战精解>>、<<精通Qt4编程>>、<<Qt Creator快速入门>>、《零基础学Qt4编程》。个人比较喜欢老外写的这本书<<C++ GUI Programming with Qt4>>,不仅系统讲解了QT的绝大部分主题,同时还讲解了QT的一些思想和原理。不过最好的参考还是Qt的Demos和帮助文档。
The results of a successful configuration are build files that control the build step. The nature of the build files depends on the generator used during configuration, but in all cases they contain several targets, one per library, and a default global target corresponding to all the libraries.
首先声明,本文并非原创,纯属搬运,内容来自一位叫做飞扬青春的大神的Gitee主页,主要是为了收藏下面介绍的100多个Qt开发经验。比如qss的ANSI编码、嵌套窗口中主窗口无法接收鼠标移动事件等,又比如我用qss设置窗口样式,但是项目每次重新构建以后,样式表就会不生效等问题,也花了自己不少时间去解决,所以在这里转发大神的经验,留作以后参考和逐条的研究,也分享给更多正在学习Qt或者正在使用Qt进行程序开发的朋友们。
注释以PASCAL VOC格式保存为XML文件,这是ImageNet使用的格式。此外,它还支持YOLO格式
Ubuntu 18.04 + Geant4.10.05.p01,2019年10月21日于北师大。
用qt开发商业程序已经十年了,陆陆续续开发过至少几十个程序,除了一些算不算项目的小工具外,大部分的程序都需要有个日志的输出功能,希望可以将程序的运行状态存储到文本文件或者数据库或者做其他处理等,qt对这个日志输出也做了很好的封装,在Qt4是qInstallMsgHandler,Qt5里边是qInstallMessageHandler,有了这个神器,只要在你的项目中所有qdebug qinfo等输出的日志信息,都会重定向接收到,网上大部分人写的demo都是接收到输出打印日志存储到文本文件,其实这就带给很多人误解,容易产生以为日志只能输出到文本文件,其实安装了日志钩子以后,拿到了所有调试打印信息,你完全可以用来存储到数据库+html有颜色区分格式的文件+网络转发输出(尤其适用于嵌入式linux无界面程序,现场不方便外接调试打印的设备)。
我们使用QUrl装载url请求的时候,往往需要写参数,但是由于Qt4与Qt5的改动导致QUrl接口也会不一样。 http://www.example.com?key1=value1&key2=valu
能够导出控件布局和属性设置数据到xml文件或者其他文件,也是一个非常实用的功能,类似于QtDesigner中把页面设计好以后生成的.ui结尾的文件,其实就是xml文件,按照约定的规则存储好控件名称和属性名称及对应的属性值,然后打开的时候按照这个规则取出来就行了。每个控件还有固定的几个数据需要存储,比如XY轴和对应的宽度高度,然后在xml数据文件的最开始还可以存储整个画布的宽度高度以便其他用途。导出到xml格式,是为了方便解析,毕竟xml数据格式的解析,各种语言平台都有,而且都是非常成熟快速的。其实还可以考虑存储到数据库,这样就更加强大了,能够存储的东西更多,可以干的事情更多。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project.org/ Qt本身支持众多操作系统。从通用操作系统Linux、Windows,到手机系统Android、iOS、WinPhone,嵌入式系统支持QNX、VxWorks,应用非常广泛。 基于Qt的软件非常多,其中最知名的要数Linux桌面系统KDE(涵盖无数以K打头的应用软件)。国内WPS for Linux版本、360 for Linux也是使用Qt库开发的界面。只要有C++基础,Qt是很容易学的,而且开发跨平台的程序也容易。目前主流使用的Qt库有Qt4和Qt5两个大版本,下面介绍其在Windows系统里的下载和安装。
上一篇文章负责把设计好的控件数据导出到了xml文件,本偏文章负责把导出的xml数据文件导入,然后在画布上自动生成对应的控件,Qt内置的xml数据解析功能,非常强大,都封装在QtXml组件中,Qt有个好处就是,封装了众多的各大操作系统平台的功能,尤其是GUI控件,不愧是超大型一站式GUI超市,虽然网络组件不是很强大,但是应付一些基础应用还是绰绰有余的。在导出xml数据的时候,属性列表和值都按照xml的属性存储的而不是子节点,所以在解析的时候需要遍历节点的属性名称和属性值,QDomNamedNodeMap attrs = element.attributes();然后循环挨个取出名称和值即可,QDomNode n = attrs.item(i);QString nodeName = n.nodeName();QString nodeValue = n.nodeValue();
既然Qt是跨平台的,那么能不能在嵌入式平台实现一下呢?最近刚好看到,ST官方在开展创客大赛活动,就买了米尔科技的YA157C开发板移植一下。
工作中有幸做过关于 Qt5 Json 模块向 Qt4 的移植。做过有关 Qt Json 与 JsonCpp 的对比,并做过相关的兼容工作。所以着重研究了一下有关 Json 解析器的相关内容。注:大家常说的 QJson 其实并不是 Qt 中的模块,而是在 Qt4 没有 Json 模块的年代,一个非官方的第三方模块。对于现在 Qt 中的 Json 模块,官方称之为 Qt Json。
该Qt4项目以前是使用Qt4.7.4 MSVC2008开发的,因为使用到了OWC10(Office Web Components),使用MSVC编译器的话无法正常升级到Qt4.8.x和Qt5,于是将编译器转成了MinGW4.7,Qt升级到了4.8.4。今天Qt 5.0.1-MinGW预编译版本发布了,于是就拿它练手,将它升级到Qt5,以减少系统中存在的多个Qt版本 。遇到的问题如下: 1. 由于Qt5将大部分桌面部件移到了Qt Widgets模块中,所以在.pro中要增加下面一行 QT += widget
摘要 在我之前的文章中,我使用了不同编程语言开发了如下许多上位机。 序号内容语言1《如何定制自己的HID调试助手》C#2《C# 串口上位机开发》C#3《Qt 串口上位机开发》QT4《教你动手写UDP协议栈 - OTA上位机》python5《基于RT-THREAD nano的平衡车--上位机软件》QT6《R-Plan上位机》QT7《BearPi TCP》QT 你会发现很零散,集成度,而且久而久之就没有维护了。今天我又来解锁一种开发工具的神器--VScode插件。 其实vscode现在已经很多大厂先后开发出他们
分别介绍Qt4与Qt5版本将QML界面嵌入到QWidget中使用。 Qt4使用方法 项目文件添加 QT+=declarative QDeclarativeView *view = new QDeclarativeView; view->setSource(QUrl::fromLocalFile("file.qml")); view->show(); Qt5使用方法 项目文件添加 QT+=quickwidgets QQuickWidget *view = new QQuickWidget; view->set
我们是接着上一篇文章安装虚拟机与pcl的配置(1)继续 使用快捷键“ctrl+alt+T”,来打开一个命令窗口如下图 比如我们在命令窗口下输入ls 我们会看到在主目录下的所有文件 下图是我插上u盘的
1. Qt4/5判断版本操作(测试版本为Qt5.6.0): contains( QT_MAJOR_VERSION, 4 ): message("This is the Qt4 version.") contains( QT_MAJOR_VERSION, 4 ): contains( QT_MINOR_VERSION, 8 ): contains( QT_PATCH_VERSION, 7 ): message("This is the Qt4.8.7 version.") contains( QT_MAJO
使用pip安装LabelImg安装时最简单的方式,首推,安装完之后会自动把LabelImg添加到环境变量中,这样你就可以在命令行中输入:labelimg直接打开该工具——windows用户强烈推荐此方法
我使用的开发环境是:Win7+Qt 4.8.5开发库+qtcreator-2.8.0+VS2008编译器MSVC。
本篇文章介绍兼容Qt4与Qt5版本的Qml简单例程。由于Qt4与Qt5版本的qml文件不能使用宏来区分,所以使用qmake执行脚本来修改qml版本差异代码。(末尾源代码地址) qml文件转换 下列代码是项目文件代码,会在编译之前执行; 主要作用为识别Qt版本然后替换对应qml文件中的 importQtQuick1.x或 importQtQuick2.x; equals(QT_MAJOR_VERSION, 4) { equals(QT_MINOR_VERSION, 7): QT_QUICK_VERSI
上一章010303nautilus参与制作去做实验下一章010400Summary
对于Qt的初学者来说,Qt有很多不熟悉的地方,安装和使用时,都会遇到各种各样的“坑”。这些坑,如果经历过一次,就会发现其实是很简单的问题。但是如果不熟悉,那么可能折腾很久也没解决。因此我把我自己遇到的(也是后来常常被问到的)一些问题放在这里,供大家参考、讨论。
1.安装必要的软件包 yum install python python-devel xorg-x11-proto-devel libXext-devel yum install gcc-c++ 2.下载qt4、pyqt4、sip4,这几个包可以在我的服务器上下载 cd /tmp wget /GNS3/GNS3-0.7.2-src.tar.bz2 wget /PyQt-x11-gpl-4.5.2.tar.gz wget /GNS3/qt-x11-opensource-src-4.5.1.tar.gz wget /GNS3/sip-4.8.1.tar.gz 3.编译Qt4 cd /tmp tar zxvf qt-x11-opensource-src-4.5.1.tar.gz cd qt-x11-opensource-src-4.5.1 ./configure -nomake examples -nomake demos -qt-gif -no-exceptions -debug -qt3support //等几分钟 gmake //等吧,1小时-3小时不等 gmake install //继续等,30分钟或者更长 export PATH=/usr/local/Trolltech/Qt-4.5.1/bin:$PATH 4.编译sip cd /tmp tar zxvf sip-4.8.1.tar.gz cd sip-4.8.1 python configure.py make make install 5.编译PyQt cd /tmp tar zxvf PyQt-x11-gpl-4.5.2.tar.gz cd PyQt-x11-gpl-4.5.2 python configure.py make //继续等,差不多30分钟以上 make install 6.安装GNS3 cd /tmp tar jxvf GNS3-0.7.2-src.tar.bz2 -C /opt mv /opt/GNS3-0.7.2-src /opt/GNS3 7.创建几个目录 mkdir /opt/GNS3/Dynamips mkdir /opt/GNS3/IOS cd /opt/GNS3/Dynamips wget http://www.ipflow.utc.fr/dynamips/dynamips-0.2.8-RC2-x86.bin //for 32bit chmod +x ./dynamips-0.2.8-RC2-x86.bin wget http://www.ipflow.utc.fr/dynamips/dynamips-0.2.8-RC2-amd64.bin //for 64bit chmod +x ./dynamips-0.2.8-RC2-amd64.bin 8.运 行GNS3 python /opt/GNS3/gns3
这里的调试信息为qDebug(), qWarning(), qCritical(), qFatal()的输出.通过注册回调函数:
近一段时间,更多的接触了linux系统,之前的印象中,linux系统更偏向于命令行模式,更多的是作为服务器来使用,现在却作为跟windows一样的界面操作系统来使用,不得不说还是带来一定的冲击的。
解决Qml程序中一个非常常见的警告 QML debuggingisenabled.Onlyusethisina safe environment. 为什么会有这个警告? 由于在Qt5以上版本默认开启QML调试器造成的。用于告知用户,这将打开一个到运行QML的Javascript解释器的端口,以便从中获得调试输出。显然,这会造成一个安全漏洞,所以在不安全的地方使用时应该关闭它(在释放运行时自动关闭)。这个警告是为了提醒你这一点。 注意 Qt4默认不开启QML调试器,而Qt5版本以上默认开启。 如果您不使用QM
尽管如此,如果简单Qt的工程都不知道怎么用 cmake 构建,复杂的工程,就更不知道如何使用 cmake 了。还是从简单的学起吧
嵌入式岗位,是介于硬件工程师和软件工程师之前的一个岗位。他的工作内容需要他既懂代码编写,也会硬件板子。
领取专属 10元无门槛券
手把手带您无忧上云