Qt Creator是一个跨平台的集成开发环境(IDE),用于开发基于Qt框架的应用程序。它提供了丰富的功能和工具,方便开发人员进行前端开发、后端开发、软件测试等工作。
在qbs中取消选择某些Qt测试,可以通过以下步骤实现:
这样,你取消选择的Qt测试将不会在构建和运行过程中被执行。
关于Qt Creator的更多信息和使用方法,你可以参考腾讯云的Qt Creator产品介绍页面:Qt Creator产品介绍。
http://m.blog.csdn.net/blog/yhc13429826359/37735865
http://blog.csdn.net/zhangrelay/article/details/52214411
http://www.cnblogs.com/Bonker/p/3565147.html
英文文档连接: http://qt-project.org/doc/qt-5/qmake-manual.html http://qt-project.org/doc/qt-5/qmake-overview.html 由于qmake manual和overview 两章的内容都不多就把它们放在一起翻译了出来 qmake 指南 qmake 是帮助简化跨平台项目开发的构建过程的工具,qmake能自动生成Makefile,以至于只需要几行代码就可以创建相应的Makefile。无论是不是用Qt写的软件项目都可以
这个控件写了很久了,元老级别的控件之一,开发之初主要是自己的好几个项目要用到,比如提供一个颜色下拉框设置对应的曲线或者时间颜色,视频监控项目中经常用到的OSD标签设置,这个控件的难度系数接近0,初学者都会,其实网上搜索也很多人提供了绘制的方法,就是枚举QColor::colorNames()拿到所有的内置的颜色,然后生成对应的图片作为icon设置到下拉框的item中去,对应icon的宽高由控件本身的宽高决定,本控件继承自qcombobox控件,完全保留了该控件的所有特性,同时新增了颜色改变信号,以便用户使用。
直方波形图控件非原创控件,控件大全中大概有20-30个控件非自己原创,而是参考了网上开源的代码,自己加以整理和完善,新增了插件的代码使得可以直接集成到QtDesigner或者QtCreator中。直方波形图,主要就是将外部传入的坐标集合数据进行渐变过渡的绘制,产生一个动态的过渡效果,将设置的坐标集合重新运算+1变成新的坐标集合来绘制,这样看起来绘制不会很死,而是缓慢的过渡。
默认的qcombobox控件,如果元素item中的内容过长超过控件本身的宽度的话,会自动切掉变成省略号显示,有些应用场景不希望是省略号显示,希望有多长就显示多长,还有一种应用场景是需要设置下拉元素的高度为指定的高度,比如很多触摸屏上,如果程序中的下拉框太小,手指很不好点,很容易误操作,为了杜绝这种误操作,可以将下拉框高度变大,当然更好的办法还是类似于手机app一样弹出一个大大的滑动选择框会更好。
加载插件是整个属性设计器的第一步要打通的功能,插件中的控件都加载不了,后面就别搞别玩下去了没法玩的,要从一个动态库中加载出来控件,肯定需要用到反射机制,以前做.NET开发的时候就觉得反射这个东西相当强大,居然可以读取DLL加载出来控件,现在用Qt,发现Qt也有反射机制,也许这东东可能各大开发语言平台都具备吧,Qt反射对应的类叫QMetaObject,着实强大,其实整个Qt开发框架也是超级强大的,本人自从转为Qt开发为主后,就深深的爱上了她,在其他跨平台的GUI开发框架平台面前,都会被Qt秒成渣,Qt的跨平台性是毋庸置疑的,几十兆的内存存储空间即可运行,尤其是嵌入式linux这种资源相当紧张的情况下,Qt的性能发挥到极致。
自从研究Qt编写自定义控件以来,一发不可收拾,越多越多人有类似的需求找我定制控件,陆陆续续写了上百个控件,目前已超过150个,于是逐渐衍生了另外一个需求,提供一个控件属性设计器,类似QtDesigner一样,可以方便的拖曳控件,改变属性,立即应用,并导出到文件方便下次直接加载,这个设计器有点像组态中的一个雏形,提供了基本的加载控件,导入导出数据,数据源绑定等。
上一篇文章把插件加载好了,并且把插件中的所有控件都显示到了列表框中,这次要做的就是实现拖曳控件的功能,用户选择一个控件拖曳到画布上,松开,在松开位置处自动实例化该控件,这个需要用到dropEvent和dragEnterEvent事件,重新实现这两个事件,对拖曳的对象进行过滤并调用函数实例化该控件,在实例化该控件的同时实例化控件跟随控件以便拉伸调整大小和位置。这里需要注意的是dragEnterEvent是必须的,很多人以为拖曳只要实现dropEvent就可以了,其实不行的,没有效果的,需要先dragEnterEvent来过滤好了执行event->accept()才行,不然根本没有效果,很多人尤其是初学者都挂在这里,我就是在这里摔了一跤,好疼!
能够导出控件布局和属性设置数据到xml文件或者其他文件,也是一个非常实用的功能,类似于QtDesigner中把页面设计好以后生成的.ui结尾的文件,其实就是xml文件,按照约定的规则存储好控件名称和属性名称及对应的属性值,然后打开的时候按照这个规则取出来就行了。每个控件还有固定的几个数据需要存储,比如XY轴和对应的宽度高度,然后在xml数据文件的最开始还可以存储整个画布的宽度高度以便其他用途。导出到xml格式,是为了方便解析,毕竟xml数据格式的解析,各种语言平台都有,而且都是非常成熟快速的。其实还可以考虑存储到数据库,这样就更加强大了,能够存储的东西更多,可以干的事情更多。
在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需要研究qtpropertybrowser的源码了,通过研究发现,在QtObjectControllerPrivate类中负责对控件的属性名称进行遍历,然后发送到QtVariantPropertyManager进行统一的管理,那只要将这里的属性名称进行映射就行了,对应的英文到中文或者其他语言都可以,甚至枚举值的下拉框也可以在这里换成中文的。曾经想过用翻译的机制,后面发现路很漫长,而且最终还是需要映射转换,看过QtDesigner的源码,里边最终也是将翻译文件中的对应项转换成中文的。
数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,一般数据源有三种方式获取,串口、网络、数据库,至于数据规则是什么,这个用户自己指定,本设计器全部采用第一个字节作为数据来演示。
之前就提过,Qt的属性机制强大到爆,这次的动态属性功能就是要让他爆,很难想象只要一行代码即可widget->setProperty("value", value);没错就这么简单,调用弱属性机制,可以直接控制控件中的所有属性,设计这个机制的人绝对是天才,直接跪了。至于具体底层是怎么实现的,这个可以先不管,也没有太多精力再去研究Qt的源码了,那个源码非常庞大,研究源码的时候最快的办法是搜索直接定位对应文件。本设计器除了提供文本框输入值进行动态改变控件属性以外,还提供了了滑动条、随机模拟数据、串口采集数据、网络采集数据、数据库采集数据等多种方式获取数据源。
上一篇文章负责把设计好的控件数据导出到了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();
上一篇文章已经打通了数据源之一的串口采集,这次要说的是网络采集,网络通信目前用的最多的是三种,TCP/UDP/HTTP,其中tcp通信又包括了客户端服务端两种,tcp通信才用了多次握手机制不丢包,但是耗费资源多而且需要建立连接。udp通信在大数据量或者网络不稳定的情况下,可能丢包,而且顺序无法保证,但是一个包的数据肯定是正确的,由于占用资源极少而且不需要建立连接,在很多场景中应用也蛮多,我个人用udp以来,也没发现过丢包的情况,可能数据量不够大或者是在局域网内的原因吧,反正用起来还是蛮爽的。http通信目前非常流行,尤其是和服务器之间做数据交互,基本上post请求然后返回一串json数据,解析对应的json数据即可。本次采用的TCP通信作为示例,其他两种可以自行拓展,也很简单的。
这个控件没有太多的应用场景,主要就是练手,论美观的话比不上之前发过的一个图片时钟控件,所以此控件也是作为一个基础的绘制demo出现在Qt源码中,我们可以在Qt的安装目录下找到一个时钟控件的绘制,甚至还有qml版本,本控件无非就是一个仪表边框加上时钟分钟刻度再加上时分秒指针,打完收工,我是在此基础上增加了可以设置各种颜色,然后鼠标右键可设置四种效果 普通效果/弹簧效果/连续效果/隐藏效果,弹簧效果的意思是秒钟走动的时候,先移动到超过指定位置,然后又重新弹回来,连续效果的意思是将步长减少,一点点的移动,将秒钟的定时器精度调高。还有一个新增的功能是内置了设置系统时间公共槽函数,支持任意操作系统。
数据库作为数据源,在很多组态软件中使用非常多,指定数据库类型,填写好数据库连接信息,指定对应的数据库表和字段,采集间隔,程序按照采集间隔自动采集数据库数据,绑定到界面上的控件赋值显示即可。使用数据库作为数据源,有个非常大的好处就是不用去写额外的通信代码,也与对方的什么语言什么平台无关,不会有扯皮的事情发生,例如通信协议不规范不准确导致解析不对的情况啊,这样就支持任意的语言和平台啦,毕竟有数据库这个中间载体过渡,而且任何语言任何平台都会有数据库,都兼容,所以采用数据库作为数据源不失为一种很好的方案,可以专注于软件功能的持续集成。
领取专属 10元无门槛券
手把手带您无忧上云