• 790阅读
  • 4回复

Qt编写数据可视化大屏界面电子看板2-配色方案 [复制链接]

上一主题 下一主题
离线liudianwu
 

只看楼主 倒序阅读 楼主  发表于: 05-13
一、前言
做完整个数据可视化大屏界面电子看板系统后,为了提升点逼格,需要提供好几套默认的风格样式以供选择,这样用户可以选择自己喜欢的配色方案来作为整个系统的颜色方案,去看了下市面上大部分的大屏电子看板系统,都是以蓝色为主,部分黑色,估计也许这就是大众的审美吧,那就在数据可视化大屏界面电子看板系统中也加入蓝色风格、深蓝色风格、黑色风格,三种,加上默认的紫色风格,共计内置4套风格选择,Qt的QSS是我见过的最牛逼的换肤控制样式界面颜色的东东,这个工具用好了,别提有多爽,直接qApp->setStyleSheet(qss);可以对整个应用程序换肤,如果自定义的控件定义了Q_PROPERTY的话,也会立即更改自定义控件的属性。

二、电子看板介绍
电子看板是目视化管理的一种表现形式,即对数据的状况一目了然地表现,主要是对于管理项目,它通过利用形象直观而又色彩适宜的各种视觉感知信息来组织现场生产活动,目视管理依据人类的生理特征,在生产现场充分利用信号灯、标识牌、符号颜色等方式来发出视觉信号,鲜明准确地刺激人的神经末梢,快速地传递信息,形象直观地将潜在的问题和浪费现象都显现出来。以便任何人都可以及时掌握管理现状和必要的情报,从而能够快速制定并实施应对措施。因此,管理看板是发现问题、解决问题的非常有效且直观的手段,是优秀的现场管理必不可少的工具之一。


三、功能特点
1. 整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件。
2. 子控件包括饼图+圆环图+曲线图+柱状图+柱状分组图+横向柱状图+横向柱状分组图+合格率控件+百分比控件+进度控件+设备状态面板+表格数据+地图控件+视频控件+其他控件等。
3. 二级界面可以自由拖动悬浮,支持最小化最大化关闭,响应双击自定义标题栏。
4. 数据源支持数据库采集(默认)、网络通信、网络请求等,可自由设定每个子界面的采集间隔即数据刷新频率。
5. 采用纯QWidget编写,支持Qt4.6到Qt5.12.3任何版本,支持嵌入式linux比如树莓派、香橙派、全志、imx6等。
6. 提供三个内核版本,自定义控件版本+qchart版本+echart版本。
7. 内置多套配色风格样式,默认紫色,支持任何分辨率。
8. 可设置标题+目标分辨率+布局方案,启动立即应用。
9. 可设置主背景颜色+面板颜色+十字线游标颜色。
10. 可设置多条曲线颜色,没有设置颜色的情况下内置15套精美颜色随机应用。
11. 可设置标题栏背景颜色+文字颜色。
12. 可设置曲线图表背景颜色+文字颜色+网格颜色。
13. 可设置正常颜色+警戒颜色+报警颜色+禁用颜色+百分比进度颜色。
14. 可分别设置各种字体大小,比如全局+软件名称+标题栏+子标题栏+加粗标签等。
15. 可设置标题栏高度+表头高度+行高度。
16. 曲线支持游标+悬停高亮数据点和显示值,柱状图支持顶部(可设置顶端+上部+中间+底部)显示数据,全部自适应计算位置。
17. 主界面直接鼠标右键切换布局+配色方案+关闭开启某个二级窗体。
18. 自动记忆所有子窗口的大小和位置,下次启动立即应用。
19. 动态加载布局方案菜单,可以动态新建布局、恢复布局、保存布局、另存布局等,用户可以制造任意布局。
20. 二级窗体,双击从主窗体分离出来浮动,可以自由调整大小。再次双击标题栏最大化,再次双击还原。
21. 每个模块都可以自定义采集速度,如果是数据库采集会自动排队处理。

四、特别说明
1. 可执行文件同级文件夹有layout+layout_1440+layout_1920,程序默认自动识别分辨率并加载对应的布局文件夹,比如1920分辨率则从layout_1920文件夹加载布局,并作为整体布局文件夹。
2. 程序默认是模拟数据,如果需要从数据库采集则修改配置文件WorkMode=db即可。
3. 如果发现布局拖动乱了,可以直接鼠标右键选择恢复布局即可,在保存布局以前。
4. 在中间地图模块鼠标右键可以弹出菜单,切换布局和配色方案等。
5. 在模块的标题栏上右键可以弹出默认的dock菜单,用来显示和隐藏各模块。
6. 软件关闭过程中会自动保存布局,下次启动以后自动应用。
7. 如果使用的默认的默认的配色方案比如紫色风格,则配置文件中的颜色全部无效,会自动应用代码中的颜色,如果需要启用自定义的颜色,则将配置文件的 Theme=\x81ea\x5b9a\x4e49\x98ce\x683c 即可。此时打开软件会应用配置文件中的颜色。
8. 右键菜单可以截图保存,默认命名为 配色方案名称_布局方案名称.png 保存在snap目录下。
9. 如果是XP系统请先执行fixff.cmd,用来修复ffmpeg在XP上不可用的BUG。
10. 可执行文件下载地址:https://pan.baidu.com/s/1o97IGvZgTgDhlkuXQa4B0w 提取码:r2bv ,会不定期更新程序,欢迎各位提出批评和建议。

五、效果图


六、核心代码
  1. void AppInit::initStyle()
  2. {
  3.     QStringList list;
  4.     //去掉焦点虚边框
  5.     list.append(QString("*{outline:0px;color:%1;}").arg(App::ColorTitleText));
  6.     //按钮
  7.     list.append(QString("QPushButton{background-color:%1;color:%2;}").arg(App::ColorTitleBg).arg(App::ColorTitleText));
  8.     //提示信息
  9.     list.append(QString("QToolTip{border:0px solid #F0F0F0;background:%1;color:%2;}").arg(App::ColorTitleBg).arg(App::ColorTitleText));
  10.     //标题栏
  11.     list.append(QString("#widgetTitle,QLabel[flag=\"title\"]{background-color:%1;color:%2;}").arg(App::ColorTitleBg).arg(App::ColorTitleText));
  12.     list.append(QString("#widgetTitle>QPushButton{border:none;}"));
  13.     //二级窗口标题栏字体放大
  14.     list.append(QString("#labTitle{font:%1px;min-height:%2px;}QLabel[flag=\"title\"]{border:none;padding:5px;}").arg(App::TitleFont).arg(App::TitleHeight));
  15.     //显示特殊标签
  16.     list.append(QString("QWidget[flag=\"lab\"]{background-color:%1;}").arg(App::ColorChartBg));
  17.     list.append(QString("QWidget[flag=\"lab\"]>QLabel{font:%1px;}").arg(App::LabFont));
  18.     list.append(QString("QWidget[flag=\"sub\"]{background-color:%1;}").arg(App::ColorChartBg));
  19.     list.append(QString("QWidget[flag=\"sub\"]>QLabel{font:%1px;}").arg(App::SubTitleFont));
  20.     list.append(QString("QWidget[flag=\"device\"]>QLabel{font:%1px;}").arg(App::DeviceFont));
  21.     //二级窗口背景
  22.     list.append(QString("#widgetMain{background-color:%1;}").arg(App::ColorPanelBg));
  23.     //中间窗口背景
  24.     list.append(QString("#widgetCenter{border-image:url(%1);}").arg(":/image/bg_center.png"));
  25.     list.append(QString("#labMap{border-image:url(%1);}").arg(":/image/bg_china.png"));
  26.     //中间标题
  27.     list.append(QString("#labName{font-size:%1px;font-weight:bold;color:%2;}").arg(App::NameFont).arg("#05B6FA"));
  28.     //设备监控背景
  29.     list.append(QString("#widgetDevice{background-color:%1;}").arg(App::ColorChartBg));
  30.     //数码管
  31.     list.append(QString("QLCDNumber{background-color:%1;border:none;}").arg(App::ColorChartBg));
  32.     //文本框
  33.     list.append(QString("QLineEdit{color:%1;}").arg(App::ColorTitleBg));
  34.     //按钮
  35.     //list.append(QString("QPushButton{border:1px solid %1;}").arg(App::ColorMainBg));
  36.     //表格样式
  37.     list.append(QString("QTableView{background-color:%1;gridline-color:%2;border:1px solid %2;}").arg(App::ColorChartBg).arg(App::ColorTitleBg));
  38.     list.append(QString("QTableView::item:selected{color:#FFFFFF;background:%1;}").arg("rgba(255,255,255,50)"));
  39.     list.append(QString("QTableView::item:hover{color:#FFFFFF;background:%1;}").arg("rgba(255,255,255,50)"));
  40.     //表格头部样式,所有子界面共用
  41.     list.append(QString("QHeaderView::section,QTableCornerButton:section{background-color:%1;color:%2;border:1px solid %3;font-weight:bold;font-size:%4px;}")
  42.                 .arg(App::ColorChartBg).arg(App::ColorOk).arg(App::ColorTitleBg).arg(App::MainFont + 2));
  43.     //进度条颜色
  44.     list.append(QString("QProgressBar{background:%1;text-align:center;border:1px solid %2;}").arg(App::ColorChartBg).arg(App::ColorChartText));
  45.     list.append(QString("QProgressBar:chunk{background-color:%1;}").arg(App::ColorOk));
  46.     //菜单样式
  47.     list.append(QString("QMenu{color:%1;background-color:%2;border:1px solid %3;margin:0px;font:%4px;}")
  48.                 .arg(App::ColorChartText).arg(App::ColorChartBg).arg(App::ColorPanelBg).arg(App::SubTitleFont));
  49.     list.append(QString("QMenu::item{padding:3px 20px;}QMenu::indicator{width:13px;height:13px;}"));
  50.     list.append(QString("QMenu::item:selected{color:%1;border:0px solid %2;background:%3;}")
  51.                 .arg(App::ColorTitleText).arg(App::ColorMainBg).arg(App::ColorTitleBg));
  52.     list.append(QString("QMenu::separator{height:1px;background:%1;}").arg(App::ColorTitleBg));
  53.     //自定义控件颜色
  54.     list.append(QString("frmDevice{qproperty-colorOk:%1;qproperty-colorLow:%2;qproperty-colorAlarm:%3;qproperty-colorDisable:%4;}")
  55.                 .arg(App::ColorOk).arg(App::ColorLow).arg(App::ColorAlarm).arg(App::ColorDisable));
  56.     list.append(QString("ProgressRing{qproperty-bgColor:%1;qproperty-textColor:%2;qproperty-ringColor:%3;qproperty-ringBgColor:%4;"
  57.                         "qproperty-circleColor:%5;qproperty-ringColor1:%6;qproperty-ringColor2:%7;qproperty-ringColor3:%8;}")
  58.                 .arg(App::ColorChartText).arg(App::ColorChartText).arg(App::ColorOk).arg(App::ColorTitleText).arg(App::ColorChartBg).arg(App::ColorAlarm).arg(App::ColorLow).arg(App::ColorOk));
  59.     list.append(QString("ProgressThree{qproperty-color1:%1;qproperty-color2:%2;qproperty-color3:%3;qproperty-bgColor:%4;qproperty-textColor:%5;qproperty-borderColor:%6;qproperty-borderWidth:%7;}")
  60.                 .arg(App::ColorOk).arg(App::ColorLow).arg(App::ColorAlarm).arg(App::ColorPanelBg).arg(App::ColorChartText).arg(App::ColorChartText).arg(0));
  61.     list.append(QString("GaugePercent{qproperty-baseColor:%1;}").arg(App::ColorPercent));
  62.     list.append(QString("GaugeSpeed{qproperty-textColor:%1;}").arg(App::ColorChartText));
  63.     list.append(QString("CustomChart{qproperty-bgColor:%1;qproperty-textColor:%2;qproperty-gridColor:%3;qproperty-highColor:%4;}")
  64.                 .arg(App::ColorChartBg).arg(App::ColorChartText).arg(App::ColorChartGrid).arg(App::ColorAlarm));
  65.     list.append(QString("CustomPlot{qproperty-bgColor:%1;qproperty-textColor:%2;qproperty-gridColor:%3;}")
  66.                 .arg(App::ColorChartBg).arg(App::ColorChartText).arg(App::ColorChartGrid));
  67.     list.append(QString("CustomPlot{qproperty-lineColor:%1;qproperty-lineColor1:%2;qproperty-lineColor2:%3;qproperty-lineColor3:%4;}")
  68.                 .arg(App::ColorLine).arg(App::ColorLine1).arg(App::ColorLine2).arg(App::ColorLine3));
  69.     qApp->setPalette(QPalette(App::ColorMainBg));
  70.     qApp->setStyleSheet(list.join(""));
  71.     emit changeStyle();
  72. }




专业各种自定义控件编写+UI定制+输入法定制+视频监控+工业控制+仪器仪表+嵌入式linux+各种串口网络通信,童叟无欺,量大从优,欢迎咨询购买定制!你正好需要,我正好专业!QQ:517216493 微信:feiyangqingyun Email:feiyangqingyun@163.com
群号:853086607(Qt交流大会,雨田哥群,不定期上传作品,解答作品中相关问题!) 312125701(QtQML多多指教群) 46679801(Qt开发技术交流群-5000人大群)

只看该作者 1楼 发表于: 05-13
图裂了
离线zhengtianzuo

只看该作者 2楼 发表于: 05-13
刘总的懒,我都懒得说你了!
博客地址: https://blog.csdn.net/zhengtianzuo06
Github: https://github.com/zhengtianzuo
个人产品: https://github.com/zhengtianzuo/Silk
产品网站: http://www.camelstudio.cn

只看该作者 3楼 发表于: 05-13
回 zhengtianzuo 的帖子
zhengtianzuo:刘总的懒,我都懒得说你了! (2019-05-13 11:03) 

懒怎么还秃了这是一个问题
离线hanheyfon

只看该作者 4楼 发表于: 05-16
        
快速回复
限100 字节
 
上一个 下一个