随笔分类 -  Qt/C++界面开发

摘要:一、前言 这个控件是近期定制的控件,还是比较实用的控件之一,用户主要是提了三点需求,一点是切换焦点的时候控件放大突出显示,一点是可直接输入或者编辑值,还有一点是支持上下键及翻页键和鼠标滚轮来动态修改值,类似于qspinbox控件。要能够支持直接输入首先想到的就是qlineedit控件,在原有的仪表盘 阅读全文
posted @ 2019-09-16 13:15 飞扬青云 阅读(1565) 评论(0) 推荐(0) 编辑
摘要:一、前言 自从研究Qt编写自定义控件以来,一发不可收拾,越多越多人有类似的需求找我定制控件,陆陆续续写了上百个控件,目前已超过150个,于是逐渐衍生了另外一个需求,提供一个控件属性设计器,类似QtDesigner一样,可以方便的拖曳控件,改变属性,立即应用,并导出到文件方便下次直接加载,这个设计器有 阅读全文
posted @ 2019-09-13 10:52 飞扬青云 阅读(2721) 评论(0) 推荐(0) 编辑
摘要:一、前言 上一篇文章负责把设计好的控件数据导出到了xml文件,本偏文章负责把导出的xml数据文件导入,然后在画布上自动生成对应的控件,Qt内置的xml数据解析功能,非常强大,都封装在QtXml组件中,Qt有个好处就是,封装了众多的各大操作系统平台的功能,尤其是GUI控件,不愧是超大型一站式GUI超市 阅读全文
posted @ 2019-09-13 10:28 飞扬青云 阅读(1333) 评论(0) 推荐(0) 编辑
摘要:一、前言 能够导出控件布局和属性设置数据到xml文件或者其他文件,也是一个非常实用的功能,类似于QtDesigner中把页面设计好以后生成的.ui结尾的文件,其实就是xml文件,按照约定的规则存储好控件名称和属性名称及对应的属性值,然后打开的时候按照这个规则取出来就行了。每个控件还有固定的几个数据需 阅读全文
posted @ 2019-09-13 10:10 飞扬青云 阅读(1148) 评论(0) 推荐(0) 编辑
摘要:一、前言 数据库作为数据源,在很多组态软件中使用非常多,指定数据库类型,填写好数据库连接信息,指定对应的数据库表和字段,采集间隔,程序按照采集间隔自动采集数据库数据,绑定到界面上的控件赋值显示即可。使用数据库作为数据源,有个非常大的好处就是不用去写额外的通信代码,也与对方的什么语言什么平台无关,不会 阅读全文
posted @ 2019-09-12 09:22 飞扬青云 阅读(1067) 评论(0) 推荐(0) 编辑
摘要:一、前言 上一篇文章已经打通了数据源之一的串口采集,这次要说的是网络采集,网络通信目前用的最多的是三种,TCP/UDP/HTTP,其中tcp通信又包括了客户端服务端两种,tcp通信才用了多次握手机制不丢包,但是耗费资源多而且需要建立连接。udp通信在大数据量或者网络不稳定的情况下,可能丢包,而且顺序 阅读全文
posted @ 2019-09-12 09:12 飞扬青云 阅读(856) 评论(0) 推荐(0) 编辑
摘要:一、前言 数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,一般数据源有三种方式获取,串口、网络、数据库,至于数据规则是什么,这个用户自己指定,本设计器全部采用第一个字节作为数据来演示。 串口通信在大量的工业控制领域用的最多,就因为稳定两个字,长期霸占了几十年的通信规则,现在还有大量的 阅读全文
posted @ 2019-09-12 09:01 飞扬青云 阅读(1344) 评论(0) 推荐(0) 编辑
摘要:一、前言 之前就提过,Qt的属性机制强大到爆,这次的动态属性功能就是要让他爆,很难想象只要一行代码即可widget setProperty("value", value);没错就这么简单,调用弱属性机制,可以直接控制控件中的所有属性,设计这个机制的人绝对是天才,直接跪了。至于具体底层是怎么实现的,这 阅读全文
posted @ 2019-09-11 15:49 飞扬青云 阅读(2029) 评论(0) 推荐(0) 编辑
摘要:一、前言 在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需要研究qtpropertybrowser的源码了,通过研究发现,在QtObjectControlle 阅读全文
posted @ 2019-09-11 15:36 飞扬青云 阅读(1164) 评论(0) 推荐(0) 编辑
摘要:一、前言 控件能加载拖曳拉伸了,这些都是基本的前提工作,接下来的重点就是要动态加载选中控件的属性了,Qt的属性机制那是异常的强大,只能用强大到爆来形容,Qt中编写自定义控件,如果属性都用Q_PROPERTY来描述过,那都支持整个Qt生态环境中的各种应用场景的加载,比如widget的属性设计,qml中 阅读全文
posted @ 2019-09-11 10:03 飞扬青云 阅读(1350) 评论(0) 推荐(0) 编辑
摘要:一、前言 插件控件加载了,拖曳控件也实现了,接下来就是一个最难点了,跟QtDesigner或者其他开发环境一样,能够任意自由的拉伸控件大小,移动位置,为了这个功能,还特别编写了一个控件来实现这个功能,名字叫SelectWidget描点跟随窗体控件,大致的原理就是安装事件过滤器,在生成控件的时候将该控 阅读全文
posted @ 2019-09-10 16:38 飞扬青云 阅读(1735) 评论(0) 推荐(0) 编辑
摘要:一、前言 上一篇文章把插件加载好了,并且把插件中的所有控件都显示到了列表框中,这次要做的就是实现拖曳控件的功能,用户选择一个控件拖曳到画布上,松开,在松开位置处自动实例化该控件,这个需要用到dropEvent和dragEnterEvent事件,重新实现这两个事件,对拖曳的对象进行过滤并调用函数实例化 阅读全文
posted @ 2019-09-10 10:17 飞扬青云 阅读(1679) 评论(0) 推荐(1) 编辑
摘要:一、前言 加载插件是整个属性设计器的第一步要打通的功能,插件中的控件都加载不了,后面就别搞别玩下去了没法玩的,要从一个动态库中加载出来控件,肯定需要用到反射机制,以前做.NET开发的时候就觉得反射这个东西相当强大,居然可以读取DLL加载出来控件,现在用Qt,发现Qt也有反射机制,也许这东东可能各大开 阅读全文
posted @ 2019-09-09 09:50 飞扬青云 阅读(2001) 评论(0) 推荐(0) 编辑
摘要:一、前言 视频监控系统中,除了常规的1画面、4画面、9画面、16画面以外,还有几个布局比较另类,比如6画面、8画面、13画面,有些通道需要占据不同的行列,4画面、9画面、16画面都是非常对称的布局,行数和列数都一样,而且每个通道占据的面积都一样,初学者都知道怎么处理。而其他几种布局就需要先在头脑中或 阅读全文
posted @ 2019-06-01 13:47 飞扬青云 阅读(1210) 评论(0) 推荐(0) 编辑
摘要:一、前言 Qt中的动态换肤技术是非常一流的,直接调用qApp setStyleSheet(qss);就可以对整个应用程序进行换肤,如果样式表内容不多,或者对应的贴图不对,效率还是蛮好的,不过据说有些人写了几千行的样式表,加载起来能够明显感觉卡顿,毕竟此时全部刷新加载重绘,是非常耗CPU的,这种情况就 阅读全文
posted @ 2019-06-01 13:36 飞扬青云 阅读(867) 评论(0) 推荐(1) 编辑
摘要:一、前言 视频轮询在视频监控系统中是一个基础的核心功能,尤其是上了大屏以后,这个功能是必须的,根据预先设定的轮询间隔逐个加载视频到预先设定的通道画面数中,轮询间隔、轮询画面数、轮询采用的码流类型(主码流、子码流)都可以在系统设置中进行统一设置,轮询的视频源采用摄像机表中的所有摄像机,当画面数不够的时 阅读全文
posted @ 2019-05-31 16:22 飞扬青云 阅读(1638) 评论(0) 推荐(0) 编辑
摘要:一、前言 这个效果的灵感来自于 "大屏电子看板系统" ,在很多系统中尤其是上了大屏的时候,其实在用户不在操作的时候,是很不希望看到那个鼠标箭头指针的,只有当用户操作的时候才显示出来,这个就需要开个定时器定时计算最后一次用户操作的时间,和当前时间比较,如果超过了鼠标未操作隐藏时间,则隐藏鼠标,在Qt中 阅读全文
posted @ 2019-05-31 14:35 飞扬青云 阅读(626) 评论(0) 推荐(0) 编辑
摘要:一、前言 在所有的视频监控系统中,双击摄像机的节点,对应摄像机加载到当前焦点通道显示,这个都是必须具备的功能,还有一些厂家会做双击NVR节点,自动加载该NVR下的所有摄像机全部显示,从通道1开始到通道16或者32,知道排满,或者双击对应的分组,分组下面的所有摄像机自动加载显示视频,这个基础效果在Qt 阅读全文
posted @ 2019-05-30 13:10 飞扬青云 阅读(454) 评论(0) 推荐(0) 编辑
摘要:一、前言 面板开关功能是整个系统最人性化的功能之一,可以对主界面中左侧右侧的各个小面板进行显示和隐藏,当隐藏的时候,另外的同级面板自动拉伸填充,这样就不会显得空洞,直接在每个面板的右上角提供了关闭按钮,也可以直接在顶部鼠标右键弹出菜单控制每个面板的显示和隐藏,面板的显示和隐藏以后,自动更新菜单的文字 阅读全文
posted @ 2019-05-28 14:14 飞扬青云 阅读(775) 评论(0) 推荐(0) 编辑
摘要:一、前言 一般会有两种处理方式来删除视频,一种是鼠标右键菜单,删除当前视频或者删除所有视频,一种是直接按住当前视频,移到视频通道界面以外就表示删除当前视频,这也是个比较人性化的设置,每个人的喜好不一样,和通道交换功能类似,按住视频拖动到窗体外面表示删除视频,这个功能也需要安装事件过滤器来处理,自动计 阅读全文
posted @ 2019-05-26 16:00 飞扬青云 阅读(491) 评论(0) 推荐(0) 编辑