當前位置:
首頁 >
Qt编写物联网管理平台33-设备面板
發布時間:2024/1/1
39
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Qt编写物联网管理平台33-设备面板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、前言
設備面板展示數據,相對于表格展示,可能在一個頁面中能夠展示的設備數據量少一些,但是有些用戶和場景,又需要這種面板的形式,可能更生動形象一些。尤其是經過這么些年的社會的毒打,我的原則是:用戶是上帝和大爺,盡量站在用戶的角度換位思考,只要是合理或者基本合理的需求,甚至說只要不是太過分,給錢就干。
其實這種面板展示數據的需求,從我剛開始工作的時候,編寫的軟件,就已經有了,比如一臺主機對應一個設備面板,除了顯示對應的數值(電壓值、電流值等),每個面板上還有按鈕提供用戶交互操作。對于通用的物聯網平臺來說,需要進行交互的場景很少,絕大部分都是用來展示采集到的數據,所以本系統的面板就顯示對于的數據,如果需要回控操作的話,雙擊對應面板彈出詳細面板信息進行操作。
設備面板幾個特色功能:
- 不同狀態不同顏色,正常采用全局樣式顏色、離線采用禁用顏色、低報黃色、高報紅色等。
- 雙擊分兩種,離線狀態下雙擊立即重新采集該設備,在線狀態下雙擊彈出詳情面板。
- 面板可選多種樣式,普通樣式,儀表樣式等。
二、功能特點
2.1 軟件模塊
2.2 基礎功能
2.3 特色功能
三、體驗地址
四、效果圖
五、相關代碼
#include "frmdevicenode.h" #include "ui_frmdevicenode.h" #include "quihelper.h" #include "iconhelper.h" #include "dbquery.h" #include "deviceserver.h" #include "frmdevicecontrol.h"frmDeviceNode::frmDeviceNode(QWidget *parent) : QWidget(parent), ui(new Ui::frmDeviceNode) {ui->setupUi(this);this->initForm();this->initStyle();//this->initControl(); }frmDeviceNode::~frmDeviceNode() {delete ui; }bool frmDeviceNode::eventFilter(QObject *watched, QEvent *event) {//要區分在線離線的情況//在線雙擊則彈出具體詳情面板//離線雙擊則重連當前端口下的所有設備if (event->type() == QEvent::MouseButtonDblClick) {if (!online) {QString deviceName = this->property("deviceName").toString();QString portName = DbQuery::getPortName(deviceName);DeviceServer::Instance()->readValue(portName, 255, true);} else {QString positionID = this->property("positionID").toString();frmDeviceControl::Instance()->setPositionID(positionID);frmDeviceControl::Instance()->show();}}return QWidget::eventFilter(watched, event); }void frmDeviceNode::initForm() {value = 0;online = true;alarm = false;select = false;this->installEventFilter(this);QFont font;font.setPixelSize(QUIConfig::FontSize + 2);ui->labNodeInfo->setFont(font);ui->labNodeInfo->setFixedHeight(30);//設置圖形字體QFont iconFont = IconHelper::getIconFontAwesome();ui->labNodeNamex->setFont(iconFont);ui->labPositionIDx->setFont(iconFont);ui->labNodeTypex->setFont(iconFont);ui->labNodeValuex->setFont(iconFont);ui->labNodeNamex->setText(QChar(0xf132));ui->labPositionIDx->setText(QChar(0xf015));ui->labNodeTypex->setText(QChar(0xf124));ui->labNodeValuex->setText(QChar(0xf0c3));//通過弱屬性控制樣式ui->devicePanel2->setProperty("form", "panel");ui->deviceTitle1->setProperty("form", "panel");ui->devicePanel1->setProperty("form", "panel");ui->deviceTitle1->setProperty("flag", "paneltitle");ui->devicePanel1->setProperty("flag", "panelcontrol");//可以自行根據項目需要調整范圍值小數點等ui->gaugeSpeed->setUnit("");ui->gaugeSpeed->setPrecision(0);ui->gaugeSpeed->setDigitCount(3);ui->gaugeSpeed->setRange(0, 200);ui->gaugeSpeed->setValue(ui->gaugeSpeed->getMinValue()); }void frmDeviceNode::initStyle() {//根據不同的面板樣式隱藏對應的面板if (AppConfig::PanelStyle == 0) {ui->widget1->setVisible(true);ui->widget2->setVisible(false);} else if (AppConfig::PanelStyle == 1) {ui->widget1->setVisible(false);ui->widget2->setVisible(true);}QString textColor, bgColor;if (alarm) {//判斷低報還是高報QString positionID = this->property("positionID").toString();int index = DbData::NodeInfo_PositionID.indexOf(positionID);bool alarmLimit = DbData::NodeInfo_AlarmLimit.at(index);bool alarmUpper = DbData::NodeInfo_AlarmUpper.at(index);//bool alarmOther = DbData::NodeInfo_AlarmOther.at(index);//報警面板顏色textColor = "#EEEEEE";if (alarmLimit) {bgColor = AppConfig::ColorLimit;} else if (alarmUpper) {bgColor = AppConfig::ColorUpper;} else {bgColor = AppConfig::ColorOther;}//報警狀態下的選中將顏色加個透明度if (select) {QColor color(bgColor);bgColor = QString("rgba(%1,%2,%3,150)").arg(color.red()).arg(color.green()).arg(color.blue());}} else {//選中面板顏色textColor = online ? QUIConfig::TextColor : QUIConfig::BorderColor;bgColor = select ? QUIConfig::DarkColorStart : QUIConfig::NormalColorStart;}QStringList qss;//儀表盤中的數碼管禁用樣式qss << QString("QLCDNumber:disabled{background:%1;}").arg(QUIConfig::NormalColorStart);//儀表樣式中的節點信息標簽qss << QString("#labNodeInfo{color:%1;background:%2;}").arg(textColor).arg(alarm ? bgColor : QUIConfig::DarkColorEnd);//儀表樣式面板需要調整下顏色if (AppConfig::PanelStyle == 1 && alarm) {textColor = QUIConfig::TextColor;bgColor = select ? QUIConfig::DarkColorStart : QUIConfig::NormalColorStart;}//全局文字顏色qss << QString("*{color:%1;}GaugeSpeed{qproperty-textColor:%1;}").arg(textColor);//整體面板背景顏色qss << QString("#deviceTitle1,#devicePanel1,#devicePanel2{background:%1;}").arg(bgColor);this->setStyleSheet(qss.join("")); }void frmDeviceNode::initControl() {QString positionID = this->property("positionID").toString();QString nodeName = this->property("nodeName").toString();QString nodeType = this->property("nodeType").toString();QString nodeSign = this->property("nodeSign").toString();ui->labNodeName->setText("名稱: " + nodeName);ui->labPositionID->setText("位號: " + positionID);ui->labNodeType->setText("型號: " + nodeType);ui->labNodeValue->setText(QString("數值: %1 %2").arg(value).arg(nodeSign));ui->gaugeSpeed->setText(nodeSign);ui->gaugeSpeed->setValue(value);ui->labNodeInfo->setText(positionID + " -- " + nodeName); }void frmDeviceNode::setValue(float value) {this->value = value;QString nodeType = this->property("nodeType").toString();QString nodeSign = this->property("nodeSign").toString();//有兩個傳感器是開關量,數值是1 2顯示時用正常和異常代替if (nodeType == "SJ-0001" || nodeType == "JG-0001") {ui->labNodeValue->setText(QString("數值: %1").arg(value == 1 ? "正常" : "異常"));ui->gaugeSpeed->setValue(value == 1 ? ui->gaugeSpeed->getMinValue() : ui->gaugeSpeed->getMaxValue());} else {ui->labNodeValue->setText(QString("數值: %1 %2").arg(value).arg(nodeSign));ui->gaugeSpeed->setValue(value);} }void frmDeviceNode::setOnline(bool online) {if (this->online != online) {this->online = online;if (!online) {this->value = 0;this->alarm = false;this->select = false;}this->setEnabled(online);this->initStyle();this->initControl();} }void frmDeviceNode::setAlarm(bool alarm) {//可能由低報轉為高報所以這里不要做過濾判斷this->alarm = alarm;this->initStyle(); }void frmDeviceNode::setSelect(bool select) {if (this->select != select) {this->select = select;this->initStyle();} }總結
以上是生活随笔為你收集整理的Qt编写物联网管理平台33-设备面板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用Total Recorder录制
- 下一篇: 参与澳门熊猫创意征名,喜获欧盛M55“爱