TA的每日心情 | 开心 2024-3-12 15:52 |
---|
签到天数: 1011 天 连续签到: 1 天 [LV.10]以坛为家III
|
本帖最后由 idiy 于 2019-5-9 13:26 编辑
现在,我们来制作直流充电桩界面,基本的要求如下:
1. 基于米尔的MEasey HMI实现。这样做的好处有界面风格统一,可以直接调用米尔提供的资源;易于代码的组织和管理等等。
2. 共计有 待机/启动充电/正在充电/停止充电 4个界面
3. 对于2的4个界面,用4个布局在同一窗口里实现。
4. 支持串口通信
5. 通过串口通信切换界面
6. 支持二维码
根据需求,我们可以在米尔提供的mxserial的基础上修改从而达到实现以上的需求。
基础代码
- 复制mxserial到同级目录下,并修改文件夹名字为evcharger
- 在evcharger/res/images目录下添加evcharger192.png
- 在evcharger目录下添加12_evcharger.desktop,内容如下:
- [Desktop Entry]
- Name=EV Charger
- Name[zh_TW]=充电桩
- Name[zh_CN]=充电桩
- Type=Application
- Icon=/usr/share/pixmaps/evcharger192.png
- Exec=/home/myir/evcharger --platform linuxfb
- Terminal=false
- MimeType=application/x-directory;inode/directory;
- Categories=System;FileTools;Utility;Qt;FileManager;
复制代码
- 在evcharger目录下添加evcharger.pro,内容如下:
- #-------------------------------------------------
- #
- # Project created by QtCreator 2017-12-22T18:54:31
- #
- #-------------------------------------------------
- QT += core gui dbus
- greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
- TARGET = evcharger
- TEMPLATE = app
- SOURCES += main.cpp \
- mxmaindialog.cpp \
- systemactionwidget.cpp \
- systemcontentwidget.cpp
- HEADERS += mxmaindialog.h \
- systemactionwidget.h \
- systemcontentwidget.h
- target.path = /home/myir
- inst1.files = ./12_evcharger.desktop
- inst1.path = /usr/share/applications
- inst2.files = ./res/images/evcharger192.png
- inst2.path = /usr/share/pixmaps
- INSTALLS += target inst1 inst2
- include(../mxbase/mxbase.pri)
- win32:CONFIG(release, debug|release): LIBS += -L$OUT_PWD/../mxdbus/release/ -lmxdbus
- else:win32:CONFIG(debug, debug|release): LIBS += -L$OUT_PWD/../mxdbus/debug/ -lmxdbus
- else:unix:!macx: LIBS += -L$OUT_PWD/../mxdbus/ -lmxdbus
- INCLUDEPATH += $PWD/../mxdbus
- DEPENDPATH += $PWD/../mxdbus
- win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $OUT_PWD/../mxdbus/release/libmxdbus.a
- else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $OUT_PWD/../mxdbus/debug/libmxdbus.a
- else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $OUT_PWD/../mxdbus/release/mxdbus.lib
- else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $OUT_PWD/../mxdbus/debug/mxdbus.lib
- else:unix:!macx: PRE_TARGETDEPS += $OUT_PWD/../mxdbus/libmxdbus.a
- DISTFILES += \
- res/images/evcharger192.png
复制代码
这样就新建立了一个新的工程evcharger,在这个基础上可以进行修改了。由于工程比较多,在编译的时候会比较慢,可以把在mxde.pro中除 mxdbus 和 evcharger 之外的所有工程都删掉。
有些朋友可能会问,我不用在MEasy HMI框架上新建工程,而是直接用QT Creator新建工程,可以吗?答案是肯定的:可以!但是,如果这么做的话就不方便调用米尔提供的资源了。
在 mxapp_en.ts中添加如下(需要显示的英文字符串放在这个文件里)
- <message>
- <source>EV Charger</source>
- <translation type="unfinished"></translation>
- </message>
复制代码
切换到mxapp_en.ts所在目录,生成mxapp_en.qm
- /opt/myir-imx6ulx-qt5/sysroots/x86_64-pokysdk-linux/usr/bin/qt5/lrelease -v
- erbose mxapp_en.ts -qm mxapp_en.qm
复制代码
在 mxapp_zh.ts中添加如下(翻译成中文的字符串放在这个文件里)
- <message>
- <source>EV Charger</source>
- <translation>充电桩</translation>
- </message>
复制代码
生成 mxapp_zh_CN.qm
- /opt/myir-imx6ulx-qt5/sysroots/x86_64-pokysdk-linux/usr/bin/qt5/lrelease -v
- erbose mxapp_zh_CN.ts -qm mxapp_zh_CN.qm
复制代码
刚开始是这样的,一直提示找不到lrelease!经过好一会折腾才解决了问题。
修改标题显示
删除控件。这样,就生成了一个空白的界面,如下图:
二维码代码移植和显示
我选择了 QZXing 来做二维码的显示。QZXing 在 sourceforge.net 上的主页打不开了,
可能是由于众所周知的原因,需要爬扶梯。还好,在github上有副本:
移植QZXing
- 下载代码之后,将src目录复制到工程目录下并改名为QZXing
- 在evcharger.pro中末尾一行之后加上 include(QZXing/QZXing.pri)
使用QZXing显示二维码
使用QZXing显示二维码也很简单,如下:
- QString data = "20190508";
- QImage barcode = QZXing::encodeData(data, QZXing::EncoderFormat_QR_CODE,
- QSize(260, 260), QZXing::EncodeErrorCorrectionLevel_H);
- ui->label->setPixmap(QPixmap::fromImage(barcode));
复制代码
|
|