Files
2024-02-27 14:55:36 +08:00

321 lines
9.6 KiB
C++

#include "MyWidget.h"
#include <FrontendBackendBridge.h>
#include <QDebug>
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<ShowWidgetsCls::widgets> 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;
// }
// }
// }
//}
//写死
else
{
int width = 4;
int height = 6;
for(int loop=0;loop<4;loop++)
for (int index = 0; index < 6; index++)
{
int x = index % 2;
int y = index / 2;
switch (loop)
{
case 1:
x += 2;
break;
case 2:
y += 3;
break;
case 3:
x += 2;
y += 3;
break;
}
m_gridlayout->addWidget(m_list.at(index + loop*6), y,x );
}
}
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();
}