一、前言

之前就提过,Qt的属性机制强大到爆,这次的动态属性功能就是要让他爆,很难想象只要一行代码即可widget->setProperty(“value”, value);没错就这么简单,调用弱属性机制,可以直接控制控件中的所有属性,设计这个机制的人绝对是天才,直接跪了。至于具体底层是怎么实现的,这个可以先不管,也没有太多精力再去研究Qt的源码了,那个源码非常庞大,研究源码的时候最快的办法是搜索直接定位对应文件。本设计器除了提供文本框输入值进行动态改变控件属性以外,还提供了了滑动条、随机模拟数据、串口采集数据、网络采集数据、数据库采集数据等多种方式获取数据源。
这里不得不提下一个牛逼的技巧:QLabel有三种设置文本的方法,掌握好Qt的属性系统,举一反三,可以做出很多效果。

ui->label->setStyleSheet("qproperty-text:hello;");
ui->label->setProperty("text", "hello");
ui->label->setText("hello");

体验地址:https://gitee.com/feiyangqingyun/QUCSDK
https://github.com/feiyangqingyun/qucsdk

二、实现的功能

  1. 自动加载插件文件中的所有控件生成列表,默认自带的控件超过120个。
  2. 拖曳到画布自动生成对应的控件,所见即所得。
  3. 右侧中文属性栏,改变对应的属性立即应用到对应选中控件,直观简洁,非常适合小白使用。
  4. 独创属性栏文字翻译映射机制,效率极高,可以非常方便拓展其他语言的属性栏。
  5. 所有控件的属性自动提取并显示在右侧属性栏,包括枚举值下拉框等。
  6. 支持手动选择插件文件,外部导入插件文件。
  7. 可以将当前画布的所有控件配置信息导出到xml文件。
  8. 可以手动选择xml文件打开控件布局,自动根据xml文件加载控件。
  9. 可拉动滑动条、勾选模拟数据复选框、文本框输入,三种方式来生成数据应用所有控件。
  10. 控件支持八个方位拉动调整大小,自适应任意分辨率,可键盘上下左右微调位置。
  11. 打通了串口采集、网络采集、数据库采集三种方式设置数据。
  12. 代码极其精简,注释非常详细,可以作为组态的雏形,自行拓展更多的功能。
  13. 纯Qt编写,支持任意Qt版本+任意编译器+任意系统。

三、效果图

四、核心代码

void frmMain::initForm()
{//初始化中英属性对照表QtPropertyName::initMap();//设置没有关闭按钮ui->dockWidgetControl->setFixedWidth(200);ui->dockWidgetData->setFixedWidth(200);ui->dockWidgetProperty->setFixedWidth(220);ui->dockWidgetControl->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);ui->dockWidgetProperty->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);ui->dockWidgetData->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);this->tabifyDockWidget(ui->dockWidgetControl, ui->dockWidgetData);ui->dockWidgetControl->raise();//绑定数据源窗体的数值改变信号connect(ui->dockWidgetContentsData, SIGNAL(valueChanged(int)), this, SLOT(valueChanged(int)));//允许拖曳接收this->setAcceptDrops(true);bgPix = QPixmap(":/image/bg.png");//居中显示窗体int frmX = this->width();int frmY = this->height();QDesktopWidget w;int deskWidth = w.availableGeometry().width();int deskHeight = w.availableGeometry().height();QPoint movePoint(deskWidth / 2 - frmX / 2, deskHeight / 2 - frmY / 2);this->move(movePoint);//初始化随机数种子QTime t = QTime::currentTime();qsrand(t.msec() + t.second() * 1000);//定时器模拟随机值赋值给控件timer = new QTimer(this);connect(timer, SIGNAL(timeout()), this, SLOT(setValue()));timer->setInterval(2000);
}void frmMain::setValue()
{int value = qrand() % 100;valueChanged(value);
}void frmMain::valueChanged(int value)
{QList<QWidget *> widgets = ui->centralwidget->findChildren<QWidget *>();foreach (QWidget *widget, widgets) {widget->setProperty("value", value);}
}

五、控件介绍

  1. 超过150个精美控件,涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、高亮按钮、滑动选择器、农历等。远超qwt集成的控件数量。
  2. 每个类都可以独立成一个单独的控件,零耦合,每个控件一个头文件和一个实现文件,不依赖其他文件,方便单个控件以源码形式集成到项目中,较少代码量。qwt的控件类环环相扣,高度耦合,想要使用其中一个控件,必须包含所有的代码。
  3. 全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式linux等,不乱码,可直接集成到Qt Creator中,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。
  4. 每个控件都有一个对应的单独的包含该控件源码的DEMO,方便参考使用。同时还提供一个所有控件使用的集成的DEMO。
  5. 每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。
  6. 每个控件默认配色和demo对应的配色都非常精美。
  7. 超过130个可见控件,6个不可见控件。
  8. 部分控件提供多种样式风格选择,多种指示器样式选择。
  9. 所有控件自适应窗体拉伸变化。
  10. 集成自定义控件属性设计器,支持拖曳设计,所见即所得,支持导入导出xml格式。
  11. 自带activex控件demo,所有控件可以直接运行在ie浏览器中。
  12. 集成fontawesome图形字体+阿里巴巴iconfont收藏的几百个图形字体,享受图形字体带来的乐趣。
  13. 所有控件最后生成一个动态库文件(dll或者so等),可以直接集成到qtcreator中拖曳设计使用。
  14. 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。
  15. 自定义控件插件开放动态库使用(永久免费),无任何后门和限制,请放心使用。
  16. 目前已提供26个版本的dll,其中包括了qt5.12.3 msvc2017 32+64 mingw 32+64 的。
  17. 不定期增加控件和完善控件,不定期更新SDK,欢迎各位提出建议,谢谢!
  18. Qt入门书籍推荐霍亚飞的《Qt Creator快速入门》《Qt5编程入门》,Qt进阶书籍推荐官方的《C++ GUI Qt4编程》。
  19. 强烈推荐程序员自我修养和规划系列书《大话程序员》《程序员的成长课》《解忧程序员》,受益匪浅,受益终生!
  20. SDK下载链接:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_quc.zip

Qt编写控件属性设计器6-动态属性相关推荐

  1. Qt编写控件属性设计器

    一.前言 自从研究Qt编写自定义控件以来,一发不可收拾,越多越多人有类似的需求找我定制控件,陆陆续续写了上百个控件,目前已超过150个,于是逐渐衍生了另外一个需求,提供一个控件属性设计器,类似QtDe ...

  2. Qt编写控件属性设计器4-加载属性

    一.前言 控件能加载拖曳拉伸了,这些都是基本的前提工作,接下来的重点就是要动态加载选中控件的属性了,Qt的属性机制那是异常的强大,只能用强大到爆来形容,Qt中编写自定义控件,如果属性都用Q_PROPE ...

  3. Qt编写控件属性设计器7-串口采集

    一.前言 数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,一般数据源有三种方式获取,串口.网络.数据库,至于数据规则是什么,这个用户自己指定,本设计器全部采用第一个字节作为数据来演示. ...

  4. Qt编写控件属性设计器5-属性中文

    一.前言 在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需 ...

  5. Qt编写控件属性设计器2-拖曳控件

    一.前言 上一篇文章把插件加载好了,并且把插件中的所有控件都显示到了列表框中,这次要做的就是实现拖曳控件的功能,用户选择一个控件拖曳到画布上,松开,在松开位置处自动实例化该控件,这个需要用到dropE ...

  6. Qt编写控件属性设计器3-拉伸控件

    一.前言 插件控件加载了,拖曳控件也实现了,接下来就是一个最难点了,跟QtDesigner或者其他开发环境一样,能够任意自由的拉伸控件大小,移动位置,为了这个功能,还特别编写了一个控件来实现这个功能, ...

  7. Qt编写控件属性设计器11-导入xml

    一.前言 上一篇文章负责把设计好的控件数据导出到了xml文件,本偏文章负责把导出的xml数据文件导入,然后在画布上自动生成对应的控件,Qt内置的xml数据解析功能,非常强大,都封装在QtXml组件中, ...

  8. Qt编写控件属性设计器10-导出xml

    一.前言 能够导出控件布局和属性设置数据到xml文件或者其他文件,也是一个非常实用的功能,类似于QtDesigner中把页面设计好以后生成的.ui结尾的文件,其实就是xml文件,按照约定的规则存储好控 ...

  9. linux QT 结束当前进程_Qt编写控件属性设计器7-串口采集

    一.前言 数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,一般数据源有三种方式获取,串口.网络.数据库,至于数据规则是什么,这个用户自己指定,本设计器全部采用第一个字节作为数据来演示. ...

最新文章

  1. 使用PHP导入Excel和导出数据为Excel文件
  2. 0基础学python难吗-0基础学武汉Python开发课程有多难?该怎么入门?
  3. WMS Schema
  4. Linux中wait()函数及waitpid()函数
  5. VirtualBox4.3.12 安装ubuntu 14.04 分辨率过小(600*480)问题的解决方法
  6. Kafka如何实现每秒上百万的超高并发写入?掌握好面试给你打满分!
  7. SQL Server 2000 ——系统表和系统视图
  8. Master-Worker设计模式介绍
  9. Python数字图像处理
  10. 基于Java、Jsp实现购物车的功能
  11. 安装SQL Server2012报Microsoft.NET Framework4无法安装错误解决方案
  12. 惠普局域网共享打印机设置_HP LaserJet 1020局域网共享打印实操
  13. win7计算机怎么录屏,win7电脑怎么录屏?这个实用工具给你答案!
  14. 微信脚本配置服务器,微信自动加人脚本教程
  15. at89c2051 定时器用法 c语言编程资料,用AT89C2051单片机制作的数字电容表.doc
  16. 计算机的存储单位B KB MB GB TB···
  17. angularjs grunt uglify 报错
  18. java图片改变分辨率并保存
  19. android 打包提示 Password verification failed
  20. Oracle的学习详解

热门文章

  1. 北理工研究团队在脑-控移动机器人上取得重要进展
  2. 雷电2接口_雷电接口和Mini接口有什么关系
  3. 微信服务商商户进件php,关于微信服务商特约商户进件的问题
  4. Qt之按钮添加背景图片的几种方法
  5. Webstorm安装px2rem插件
  6. vim复制单个字符_vim文本编辑器——删除、复制、剪切、更改某一个字符、替换、撤销、关键字搜索...
  7. 【Pytorch基础教程27】DeepFM推荐算法
  8. 小米2S 評測 跑分、相機試拍、電量-為發燒而生
  9. Android studio 主题设置
  10. web点播/直播播放器-VideoJS 网页直播实现双击全屏