#include "MyWidget.h" #include #include MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setWindowFlags(Qt::Window|Qt::FramelessWindowHint|Qt::WindowSystemMenuHint|Qt::MSWindowsFixedSizeDialogHint |Qt::WindowMinimizeButtonHint|Qt::WindowMaximizeButtonHint); QString m_style = "QWidget{background-color: rgb(50, 50, 50);color:rgb(219,219,219);}"; this->setStyleSheet(m_style); m_gridlayout = new QGridLayout; gridPtr.reset(m_gridlayout); m_type = MyWidgetType::RESULT; } MyWidget::~MyWidget() { for (int i = 0; i < m_list.size(); i++) { delete m_list.at(i); } m_list.clear(); qDebug() << " [INFO] " << " delete success!"; } bool MyWidget::layoutWindow(QJsonObject json_obj, MyWidgetType type) { qDebug() << " [INFO] " << " Change MyWidgetType:" << type; try { // 清空布局 QLayoutItem* child; while ((child = m_gridlayout->takeAt(0)) != 0) { if (child->widget()) { child->widget()->setParent(NULL); } delete child; } // 清空显示窗口 for (int i = 0; i < m_list.size(); i++) { delete m_list.at(i); } m_list.clear(); //加载配置文件 QJsonArray array; QJsonArray stationlist; if (type == MyWidgetType::RESULT) { stationlist = json_obj.value("showlist").toArray(); for (int i = 0; i < stationlist.size(); i++) { QJsonObject obj = stationlist.at(i).toObject(); array.append(obj); } for (int i = 0; i < array.size(); i++) { QJsonObject obj = array.at(i).toObject(); QString key = obj.value("key").toString(); // key QString cName = obj.value("cName").toString(); // 名称 viewWidget* m_widget = new viewWidget; m_widget->setKey(key); m_widget->setName(cName); m_list.append(m_widget); } } else { stationlist = json_obj.value("stationlist").toArray(); for (int i = 0; i < stationlist.size(); i++) { QJsonObject station_obj = stationlist.at(i).toObject(); QString key = station_obj.value("key").toString(); QJsonArray cameramodulelist = station_obj.value("cameramodulelist").toArray(); for (auto val = 0; val < cameramodulelist.size(); val++) { QJsonObject obj = cameramodulelist.at(val).toObject(); array.append(obj); } } for (int i = 0; i < array.size(); i++) { QJsonObject obj = array.at(i).toObject(); QString type = obj.value("type").toString(); if (type.contains("camera")) { QString key = obj.value("key").toString(); // key 示例:camera1 QString cName = obj.value("cName").toString(); // 相机名称 viewWidget* m_widget = new viewWidget; m_widget->setKey(key); m_widget->setName(cName); m_list.append(m_widget); } } } if (array.isEmpty()) return false; int m_row = 0; if(m_list.size() < 4) { for (int iii = 0; iii < m_list.size(); iii++) { m_row = m_gridlayout->rowCount(); if( m_list.size() - 1 > iii ) { m_gridlayout->addWidget(m_list.at(iii),m_row,0); m_gridlayout->addWidget(m_list.at(iii+1),m_row,1); iii += 1; } else if ( m_list.size()%2 != 0 && (m_list.size() -1 == iii)) { m_gridlayout->addWidget(m_list.at(iii),m_row,0); } } } else { int sqr = sqrt(m_list.size())+1; for (int iii = 0; iii < sqr; iii++) { for (int jjj = 0; jjj < sqr; jjj++) { //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " --- iii:" << iii; if (iii * sqr + jjj < m_list.size()) { m_gridlayout->addWidget(m_list.at(iii * sqr + jjj), iii, jjj); } else { break; } } } } m_gridlayout->setAlignment(Qt::AlignHCenter|Qt::AlignTop); m_gridlayout->setSpacing(0); m_gridlayout->setContentsMargins(0, 0, 0, 0); setLayout(m_gridlayout); m_type = type; } catch (QString ev) { qCritical() << " [Error] " << " ev:" << ev; return false; } return true; } bool MyWidget::layoutWindow_setting(QString type) { qDebug() << " [INFO] " << " Change MyWidgetType:" << type; try { // 清空布局 QLayoutItem* child; while ((child = m_gridlayout->takeAt(0)) != 0) { if (child->widget()) { child->widget()->setParent(NULL); } delete child; } // 清空显示窗口 for (int i = 0; i < m_list.size(); i++) { delete m_list.at(i); } m_list.clear(); //加载配置文件 QJsonArray array; QJsonArray stationlist; QList list = bridge.back.json.showWidgets.getWidgets(type); if (list.size() == 0) return false; for (auto widget : list) { QString key = type; // key QString cName = widget.cName; viewWidget* m_widget = new viewWidget; m_widget->setKey(key); m_widget->setName(cName); m_list.append(m_widget); } int m_row = 0; if (m_list.size() < 4) { for (int iii = 0; iii < m_list.size(); iii++) { m_row = m_gridlayout->rowCount(); if (m_list.size() - 1 > iii) { m_gridlayout->addWidget(m_list.at(iii), m_row, 0); m_gridlayout->addWidget(m_list.at(iii + 1), m_row, 1); iii += 1; } else if (m_list.size() % 2 != 0 && (m_list.size() - 1 == iii)) { m_gridlayout->addWidget(m_list.at(iii), m_row, 0); } } } else { int sqr = sqrt(m_list.size()) + 1; for (int iii = 0; iii < sqr; iii++) { for (int jjj = 0; jjj < sqr; jjj++) { //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " --- iii:" << iii; if (iii * sqr + jjj < m_list.size()) { m_gridlayout->addWidget(m_list.at(iii * sqr + jjj), iii, jjj); } else { break; } } } } m_gridlayout->setAlignment(Qt::AlignHCenter | Qt::AlignTop); m_gridlayout->setSpacing(0); m_gridlayout->setContentsMargins(0, 0, 0, 0); setLayout(m_gridlayout); if(type=="Camera") m_type = MyWidgetType::CAMERA; else m_type = MyWidgetType::RESULT; } catch (QString ev) { qCritical() << " [Error] " << " ev:" << ev; return false; } return true; } MyWidgetType MyWidget::GetMyWidgetType() { return m_type; } void MyWidget::On_reciveImage(QString key,QImage* Image,int index) { //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " --- key:" << key; if(index!=-1&& index< m_list.size()&& index>=0) { QString m_name = m_list.at(index)->getKey(); if(m_name ==key) m_list.at(index)->reciveImage(key, Image); } else for (int i = 0; i < m_list.size();i++) { QString m_name = m_list.at(i)->getKey(); if (m_name.indexOf(key) != -1) { m_list.at(i)->reciveImage(key,Image); return; } } if (Image) { delete Image; Image = nullptr; } } // key 窗口名称 void MyWidget::On_reciveData(QString key,QByteArray byte) { //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " ---- key:" << key << " byte len:" << byte; for (int i = 0; i < m_list.size();i++) { QString m_name = m_list.at(i)->getKey(); if ( m_name.indexOf( key )!=-1) { m_list.at(i)->reciveData(key,byte); return; } } } void MyWidget::mouseMoveEvent(QMouseEvent *event) { emit mouseRecover(); }