add monitor diagram dynamic para
This commit is contained in:
parent
fb814b65a5
commit
7cb676d940
|
|
@ -105,6 +105,8 @@ public:
|
|||
|
||||
void monitorItemSelected(QUuid); //运行时item选中事件
|
||||
void monitorItemDetailAttr(QUuid); //显示属性详情
|
||||
|
||||
void monitorItemSet(QUuid); //运行时item设置完成
|
||||
Q_SIGNALS:
|
||||
void activatePage(const QString&); //激活当前model所在page
|
||||
void updateCurrentItems(QList<monitorRelationItem>,bool); //更新当前组态元件列表 <名称,uid>
|
||||
|
|
|
|||
|
|
@ -140,6 +140,7 @@ class ItemPort;
|
|||
class ModelProperty;
|
||||
class PowerEntity;
|
||||
class AbstractProperty;
|
||||
class HandleText;
|
||||
|
||||
typedef AbstractShapeType<QGraphicsItem> AbstractShape;
|
||||
|
||||
|
|
@ -198,6 +199,12 @@ public:
|
|||
virtual bool getPosChanged() {return _posChanged;}
|
||||
virtual void setMoveable(bool b){_bMove = b;}
|
||||
virtual bool getMoveable(){return _bMove;}
|
||||
virtual void addDynamicText(QString tag,QString para); //动态显示数据
|
||||
virtual void removeDynamicText(QString tag); //移除动态显示数据
|
||||
virtual void removeAllDynamicText();
|
||||
virtual bool hasDynamicText(const QString& tag);
|
||||
virtual void setDynamicLayoutRadius(qreal radius);
|
||||
virtual QMap<QString,HandleText*> getDynamicText() {return m_mapDynamicText;}
|
||||
|
||||
int collidesWithHandle(const QPointF& point)
|
||||
{
|
||||
|
|
@ -474,20 +481,27 @@ public:
|
|||
double dParam = dWidth > dHeight ? (dDiagonal-dWidth*0.5):(dDiagonal-dHeight*0.5);
|
||||
m_boundingRect_selected = boundRect.adjusted(-dParam-nMargin, -dParam-nMargin, dParam+nMargin, dParam+nMargin);
|
||||
}
|
||||
|
||||
void rearrangeDynamicItems();
|
||||
public slots:
|
||||
void onUpdateData(); //data发送的更新通知
|
||||
protected:
|
||||
void rearrangeDynamicText(); //重新设置动态数据的布局
|
||||
protected:
|
||||
ModelProperty* _property;
|
||||
PowerEntity* _pEntity; //图元拓扑
|
||||
bool _itemChanged; //图元变化标志,判断是否需要保存
|
||||
QMap<QString,ItemPort*> m_mapPort; //单独存放port
|
||||
|
||||
QMap<QString,HandleText*> m_mapDynamicText; //单独存放动态数据
|
||||
QMap<int,ItemControlHandle*> m_vecHanle;
|
||||
QPointF m_lastPoint; //鼠标上次点击位置
|
||||
bool m_touched; //被触碰状态
|
||||
QRectF m_boundingRect_selected; //选中矩形框
|
||||
bool _posChanged = false; //位置移动标志
|
||||
bool _bMove = true; //是否允许移动
|
||||
|
||||
private:
|
||||
qreal m_layoutRadius; // 布局半径 (动态数据使用)
|
||||
};
|
||||
|
||||
class GraphicsBaseModelItem : public GraphicsBaseItem //基模item
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
#include <QFont>
|
||||
#include "graphicsItem/itemControlHandle.h"
|
||||
|
||||
int const TEXT_WIDTH = 30;
|
||||
int const TEXT_HEIGHT = 15;
|
||||
int const TEXT_WIDTH = 80;
|
||||
int const TEXT_HEIGHT = 40;
|
||||
|
||||
class QGraphicsProxyWidget;
|
||||
|
||||
|
|
@ -20,6 +20,13 @@ public:
|
|||
virtual QString getText() const override;
|
||||
void creatEditor(); //创建editor编辑文本
|
||||
void setEditable(bool b){_editable = b;}
|
||||
void setIndex(int n) {_nIndex = n;}
|
||||
int getIndex(){return _nIndex;}
|
||||
void setTagName(QString s){_sTagName = s;}
|
||||
QString getTagName(){return _sTagName;}
|
||||
void setPara(QString s){_sPara = s;}
|
||||
QString getPara(){return _sPara;}
|
||||
void setType(int n) {_type = n;}
|
||||
signals:
|
||||
void editFinish(const QString&);
|
||||
protected:
|
||||
|
|
@ -31,6 +38,10 @@ private:
|
|||
QRectF _boundingRect;
|
||||
QGraphicsProxyWidget* _proxy;
|
||||
bool _editable;
|
||||
int _nIndex;
|
||||
QString _sTagName; //监控数据的tag
|
||||
QString _sPara; //监控数据的查询参数
|
||||
int _type; //0normal 1dynamic
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#include "projectManager.h"
|
||||
#include "diagramCavas.h"
|
||||
#include "global.h"
|
||||
#include "basePropertyManager.h"
|
||||
#include <QDebug>
|
||||
|
||||
EditPanel::EditPanel(QWidget *parent)
|
||||
|
|
@ -60,7 +61,7 @@ EditPanel::~EditPanel()
|
|||
|
||||
void EditPanel::initByWizardInfo()
|
||||
{
|
||||
if(!_lstData.empty()){
|
||||
//if(!_lstData.empty() || !_pModel->getPreviewItem().empty()){
|
||||
_pModel->clearItems();
|
||||
m_pEditScene->clear();
|
||||
_lstData.clear();
|
||||
|
|
@ -70,7 +71,8 @@ void EditPanel::initByWizardInfo()
|
|||
_mainWidget->setLayout(_widgetLayout);
|
||||
m_pEditScene->addItem(_mainWidget);
|
||||
_mainWidget->setGeometry(m_pEditScene->sceneRect());
|
||||
}
|
||||
BasePropertyManager::instance().clearEditorData();
|
||||
//}
|
||||
auto& mapTotal = _pEditorWizard->getContainerStruct();
|
||||
for(auto iter = mapTotal.begin();iter != mapTotal.end();++iter){
|
||||
if(iter.key() == g_transformerLevel)
|
||||
|
|
|
|||
|
|
@ -465,6 +465,7 @@ void DiagramEditorModel::linkTransItem(GraphicsBaseModelItem* pTrans,QStandardIt
|
|||
void DiagramEditorModel::generatePreview()
|
||||
{
|
||||
if(_pPanel){
|
||||
clearItems();
|
||||
_pPanel->showPreview();
|
||||
QList<EditBaseItem*> lst = _pPanel->getBlockItems();
|
||||
QMap<QString,QList<DiagramEditorComponentInfo>> baysCompo;
|
||||
|
|
|
|||
|
|
@ -2742,3 +2742,46 @@ void FixedPortsModel::monitorItemDetailAttr(QUuid uid)
|
|||
pMonitor->detailItemSelected(uid);
|
||||
}
|
||||
}
|
||||
|
||||
void FixedPortsModel::monitorItemSet(QUuid uid)
|
||||
{
|
||||
if(_nodeItem.contains(uid)){
|
||||
//QList<QString> lstRemove; //需要从item移除的动态数据
|
||||
QList<QString> lstAdd; //需要向item添加的动态数据
|
||||
|
||||
auto pItem = _nodeItem.value(uid);
|
||||
auto lst = m_monitorPara.value(uid);
|
||||
//auto mapText = pItem->getDynamicText();
|
||||
|
||||
/*for(auto iter = mapText.begin();iter != mapText.end();++iter){
|
||||
bool exist = false;
|
||||
for(auto& info:lst){
|
||||
if(info.sTag == iter.key()){ //新旧队列都存在
|
||||
exist = true;
|
||||
}
|
||||
}
|
||||
if(!exist)
|
||||
lstRemove.append(iter.key());
|
||||
}*/
|
||||
|
||||
for(auto& info:lst){
|
||||
if(info.bShowDiagram && info.bSelected){
|
||||
lstAdd.append(info.sTag);
|
||||
}
|
||||
}
|
||||
|
||||
/*for(auto& str:lstRemove){
|
||||
pItem->removeDynamicText(str);
|
||||
}*/
|
||||
pItem->removeAllDynamicText();
|
||||
|
||||
for(auto& str:lstAdd){
|
||||
for(auto& info:lst){
|
||||
if(info.sTag == str){
|
||||
pItem->addDynamicText(info.sTag,info.sConnectPara);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ GraphicsBaseItem::GraphicsBaseItem(QGraphicsItem *parent)
|
|||
setFlag(QGraphicsItem::ItemIsSelectable, true);
|
||||
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
|
||||
setAcceptHoverEvents(true);
|
||||
m_layoutRadius = 80;
|
||||
}
|
||||
|
||||
GraphicsBaseItem::GraphicsBaseItem(const GraphicsBaseItem& obj)
|
||||
|
|
@ -36,6 +37,8 @@ GraphicsBaseItem::GraphicsBaseItem(const GraphicsBaseItem& obj)
|
|||
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
|
||||
setAcceptHoverEvents(true);
|
||||
|
||||
m_layoutRadius = 80;
|
||||
|
||||
m_lastPoint = obj.m_lastPoint;
|
||||
m_touched = obj.m_touched;
|
||||
m_boundingRect_selected = obj.m_boundingRect_selected;
|
||||
|
|
@ -224,6 +227,99 @@ void GraphicsBaseItem::initialPortsByDatabase(int nComponentTypeId)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GraphicsBaseItem::addDynamicText(QString tag,QString para)
|
||||
{
|
||||
int ntagId = -1;
|
||||
for(ntagId = H_textCaption+1;ntagId < H_connect;++ntagId) //添加到未占用位置
|
||||
{
|
||||
if(!m_vecHanle.contains(ntagId))
|
||||
break;
|
||||
}
|
||||
HandleText* pText = new HandleText(this);
|
||||
pText->setEditable(false);
|
||||
pText->setIndex(ntagId);
|
||||
pText->setTagName(tag);
|
||||
pText->setType(1);
|
||||
m_vecHanle.insert(ntagId,pText);
|
||||
|
||||
m_mapDynamicText.insert(tag,pText);
|
||||
rearrangeDynamicText();
|
||||
}
|
||||
|
||||
void GraphicsBaseItem::removeDynamicText(QString tag)
|
||||
{
|
||||
for(auto& pText:m_mapDynamicText){
|
||||
if(pText->getTagName() == tag){
|
||||
int nIndex = pText->getIndex();
|
||||
m_vecHanle.remove(nIndex);
|
||||
auto p = m_mapDynamicText.take(tag);
|
||||
delete p;
|
||||
return;
|
||||
}
|
||||
}
|
||||
rearrangeDynamicText();
|
||||
}
|
||||
|
||||
void GraphicsBaseItem::removeAllDynamicText()
|
||||
{
|
||||
for(auto iter = m_mapDynamicText.begin();iter != m_mapDynamicText.end();++iter){
|
||||
int nIndex = iter.value()->getIndex();
|
||||
m_vecHanle.remove(nIndex);
|
||||
//auto p = m_mapDynamicText.take(iter.key());
|
||||
//delete p;
|
||||
}
|
||||
qDeleteAll(m_mapDynamicText);
|
||||
m_mapDynamicText.clear();
|
||||
}
|
||||
|
||||
bool GraphicsBaseItem::hasDynamicText(const QString& tag)
|
||||
{
|
||||
for(auto& pText:m_mapDynamicText){
|
||||
if(pText->getTagName() == tag){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void GraphicsBaseItem::setDynamicLayoutRadius(qreal radius)
|
||||
{
|
||||
m_layoutRadius = radius;
|
||||
rearrangeDynamicText();
|
||||
}
|
||||
|
||||
|
||||
void GraphicsBaseItem::rearrangeDynamicText()
|
||||
{
|
||||
int count = m_mapDynamicText.size();
|
||||
if (count == 0) return;
|
||||
|
||||
// 计算左右两侧的项数
|
||||
int leftCount = (count + 1) / 2; // 左侧稍多
|
||||
int rightCount = count - leftCount;
|
||||
|
||||
qreal itemHeight = 30;
|
||||
qreal startY = -((qMax(leftCount, rightCount) - 1) * itemHeight) / 2;
|
||||
|
||||
int i = 0;
|
||||
for (auto& item : m_mapDynamicText) {
|
||||
qreal x, y;
|
||||
|
||||
if (i < leftCount) {
|
||||
// 左侧排列
|
||||
x = -m_layoutRadius-20; // 左侧偏移多一点
|
||||
y = startY + i * itemHeight;
|
||||
} else {
|
||||
// 右侧排列
|
||||
x = m_layoutRadius; // 右侧偏移
|
||||
y = startY + (i - leftCount) * itemHeight;
|
||||
}
|
||||
|
||||
item->setPos(x, y);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
/********************************基模****************************************/
|
||||
GraphicsBaseModelItem::GraphicsBaseModelItem(QGraphicsItem *parent)
|
||||
:GraphicsBaseItem(parent)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ HandleText::HandleText(QGraphicsItem *parent)
|
|||
: ItemControlHandle(parent)
|
||||
,_font(QFont())
|
||||
,_proxy(nullptr)
|
||||
,_nIndex(-1)
|
||||
,_type(0)
|
||||
{
|
||||
_editable = true;
|
||||
_boundingRect = QRectF(-TEXT_WIDTH*0.5,-TEXT_WIDTH*0.5,TEXT_WIDTH,TEXT_HEIGHT);
|
||||
|
|
@ -65,7 +67,13 @@ void HandleText::paint(QPainter* painter, const QStyleOptionGraphicsItem* option
|
|||
painter->setRenderHint(QPainter::TextAntialiasing, true);
|
||||
int w = _boundingRect.width();
|
||||
int h = _boundingRect.height();
|
||||
if(_type == 0)
|
||||
painter->drawText(QPointF(-w*0.5,h*0.5),_text);
|
||||
else{
|
||||
QString displayText = _sTagName + ":" + _text;
|
||||
painter->drawText(boundingRect(), Qt::AlignCenter, displayText);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QRectF HandleText::boundingRect() const
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include "monitorToolBox.h"
|
||||
#include "monitorSideBarDlg.h"
|
||||
#include <QVBoxLayout>
|
||||
#include <QLabel>
|
||||
#include "global.h"
|
||||
|
||||
MonitorAttributeDlg::MonitorAttributeDlg(QWidget* parent)
|
||||
|
|
@ -23,9 +24,25 @@ MonitorAttributeDlg::~MonitorAttributeDlg()
|
|||
|
||||
void MonitorAttributeDlg::initial()
|
||||
{
|
||||
// 创建标题栏
|
||||
QWidget *titleBar = new QWidget(this);
|
||||
titleBar->setFixedHeight(21);
|
||||
titleBar->setStyleSheet("background-color: #2b579a; color: white;");
|
||||
|
||||
// 标题栏布局
|
||||
QHBoxLayout *titleLayout = new QHBoxLayout(titleBar);
|
||||
titleLayout->setContentsMargins(10, 0, 5, 0);
|
||||
|
||||
// 标题标签
|
||||
QLabel *titleLabel = new QLabel("对象属性");
|
||||
titleLabel->setStyleSheet("color: white; font-weight: bold;");
|
||||
|
||||
titleLayout->addWidget(titleLabel);
|
||||
|
||||
_pLayout = new QVBoxLayout(this);
|
||||
_pBox = new MonitorToolBox(this);
|
||||
_pBox->setContentsMargins(0, 0, 0, 0);
|
||||
_pLayout->addWidget(titleBar);
|
||||
_pLayout->addWidget(_pBox);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,9 +38,9 @@ void MonitorAttributeGroupDlg::createGroupView(QList<monitorItemAttributeInfo> l
|
|||
{
|
||||
QWidget* content = new QWidget();
|
||||
QGridLayout* gridLayout = new QGridLayout(content);
|
||||
gridLayout->setHorizontalSpacing(20);
|
||||
gridLayout->setVerticalSpacing(12);
|
||||
//gridLayout->setContentsMargins(12, 12, 12, 12);
|
||||
gridLayout->setHorizontalSpacing(6);
|
||||
gridLayout->setVerticalSpacing(10);
|
||||
gridLayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
// 设置列的最小宽度和拉伸比例
|
||||
gridLayout->setColumnMinimumWidth(0, 30); // 标签列最小宽度
|
||||
|
|
@ -85,6 +85,7 @@ QWidget* MonitorAttributeGroupDlg::createEditor(monitorItemAttributeInfo info)
|
|||
}
|
||||
else{ //图表
|
||||
QChartView* chartView = new QChartView(this);
|
||||
chartView->setMinimumSize(400, 300);
|
||||
chartView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
|
|
@ -95,6 +96,9 @@ QWidget* MonitorAttributeGroupDlg::createEditor(monitorItemAttributeInfo info)
|
|||
// 创建折线序列
|
||||
QLineSeries* series = new QLineSeries();
|
||||
|
||||
QFont axisFont;
|
||||
axisFont.setPointSize(9);
|
||||
|
||||
// 创建图表
|
||||
chart->addSeries(series);
|
||||
chart->setTitle(info.sName);
|
||||
|
|
@ -110,10 +114,6 @@ QWidget* MonitorAttributeGroupDlg::createEditor(monitorItemAttributeInfo info)
|
|||
QValueAxis* axisX = new QValueAxis();
|
||||
QValueAxis* axisY = new QValueAxis();
|
||||
|
||||
// 设置坐标轴标题
|
||||
axisX->setTitleText("时间");
|
||||
axisY->setTitleText("值");
|
||||
|
||||
// 添加坐标轴到图表
|
||||
chart->addAxis(axisX, Qt::AlignBottom);
|
||||
chart->addAxis(axisY, Qt::AlignLeft);
|
||||
|
|
@ -126,9 +126,21 @@ QWidget* MonitorAttributeGroupDlg::createEditor(monitorItemAttributeInfo info)
|
|||
axisX->setRange(0, 10); // 临时范围
|
||||
axisY->setRange(0, 100);
|
||||
|
||||
// 设置坐标轴标题
|
||||
axisX->setTitleText("时间");
|
||||
axisX->setLabelsFont(axisFont);
|
||||
axisX->setTitleFont(axisFont);
|
||||
axisY->setTitleText("值");
|
||||
axisY->setLabelsFont(axisFont);
|
||||
axisY->setTitleFont(axisFont);
|
||||
|
||||
chart->setTheme(QChart::ChartThemeLight);
|
||||
chart->legend()->setVisible(true);
|
||||
chart->legend()->setAlignment(Qt::AlignBottom);
|
||||
|
||||
QFont legendFont = chart->legend()->font();
|
||||
legendFont.setPointSize(8); // 设置图例字体大小
|
||||
chart->legend()->setFont(legendFont);
|
||||
}
|
||||
else if (info.nGraphType == 1) {
|
||||
QBarSeries* series = new QBarSeries();
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ void MonitorConfigDlg::onOkClicked()
|
|||
savePropertyData(ui->treeView_para->currentIndex(),_curUuid);
|
||||
}
|
||||
_parent->getModelController()->getMonitorPara() = _tempConfig; //保存临时数据
|
||||
_parent->getModelController()->monitorItemSet(_curUuid);
|
||||
hide();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
#include "monitorSelectedItemsDlg.h"
|
||||
#include "monitorSideBarDlg.h"
|
||||
#include "monitorPanel.h"
|
||||
#include "global.h"
|
||||
#include <QLabel>
|
||||
|
||||
|
||||
MonitorSelectedItemsDlg::MonitorSelectedItemsDlg(QWidget* parent)
|
||||
: QDialog(parent)
|
||||
|
|
@ -24,7 +25,22 @@ void MonitorSelectedItemsDlg::initial()
|
|||
_treeView->setModel(_parent->getParent()->getLstModel());
|
||||
_treeView->setHeaderHidden(true);
|
||||
|
||||
// 创建标题栏
|
||||
QWidget *titleBar = new QWidget(this);
|
||||
titleBar->setFixedHeight(21);
|
||||
titleBar->setStyleSheet("background-color: #2b579a; color: white;");
|
||||
|
||||
// 标题栏布局
|
||||
QHBoxLayout *titleLayout = new QHBoxLayout(titleBar);
|
||||
titleLayout->setContentsMargins(10, 0, 5, 0);
|
||||
|
||||
// 标题标签
|
||||
QLabel *titleLabel = new QLabel("图元列表");
|
||||
titleLabel->setStyleSheet("color: white; font-weight: bold;");
|
||||
|
||||
titleLayout->addWidget(titleLabel);
|
||||
_pLayout = new QVBoxLayout(this);
|
||||
_pLayout->addWidget(titleBar);
|
||||
_pLayout->addWidget(_treeView);
|
||||
connect(_treeView->selectionModel(), &QItemSelectionModel::currentChanged,
|
||||
this, &MonitorSelectedItemsDlg::onSelectionChanged);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,6 @@ void MonitorSideBarDlg::initial()
|
|||
splitter->addWidget(_attributeDlg);
|
||||
|
||||
splitter->setStretchFactor(0, 1); // 第一个部件的拉伸因子为1
|
||||
splitter->setStretchFactor(1, 2); // 第二个部件的拉伸因子为3
|
||||
splitter->setStretchFactor(1, 3); // 第二个部件的拉伸因子为3
|
||||
sideLayout->addWidget(splitter);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue