add transformer setting ui

This commit is contained in:
baiYue 2025-07-31 19:38:06 +08:00
parent 04dd9af60e
commit 064c73af08
26 changed files with 990 additions and 250 deletions

View File

@ -380,14 +380,7 @@ struct gridInfo //grid
QMap<QString,zoneInfo> zoneMap;
};*/
//===================组态编辑器使用================
struct DiagramEditorWizardInfo //组态编辑向导信息
{
/*int nIndex = 0;
double dVoltage = 0;
int nLineType = 1; //1单母线2双母线
QMap<bool,int> mapDivide; //母线划分数false为1母线true为2母
int connectType = 0;*/ //接线方式1为分段连接
};
const int g_transformerLevel = 999; //层级结构中变压器所处层级
struct DiagramEditorWizardBusInfo //组态编辑母线信息
{
@ -400,6 +393,12 @@ struct DiagramEditorWizardBusInfo //组态编辑母线信息
bool bChanged = false; //是否改变
};
enum class TransformerType //变压器类型
{
twoWinding = 0, //两绕组
threeWinding //三绕组
};
enum class BayType //间隔类型
{
busSectionBay = 0, //分段
@ -412,6 +411,20 @@ enum class BayType //间隔类型
mainTransformerBay //主变
};
enum class EditorItemType //组态编辑中的图形项类型
{
bus = 0, //母线
bay, //间隔
Trans //变压器
};
struct DiagramEditorWizardTransformerInfo //组态变压器信息
{
QString sName;
TransformerType nType;
QList<QString> lstBindObj; //连接的对象
};
struct DiagramEditorWizardBayInfo //组态间隔信息
{
QString sName;
@ -421,8 +434,9 @@ struct DiagramEditorWizardBayInfo //组态间隔信息
enum class DiagramEditorStructType
{
bus, //母线
rowData //母线对应的一行数据
block = 0, //模块(母线段、间隔、变压器)
blockContainer, //模块容器(包含若干模块)
rowData //行数据(包含若干容器)
};
struct DiagramEditorConnectType //组态编辑连接信息

View File

@ -30,7 +30,9 @@ set(DIAGRAMCAVAS_HEADER_FILES
include/diagramEditor/editRowData.h
include/diagramEditor/editMainRect.h
include/diagramEditor/editItem.h
include/diagramEditor/editBus.h
include/diagramEditor/editItems.h
include/diagramEditor/editContainerItem.h
include/diagramEditor/editBlock.h
include/diagramEditor/editBaseStruct.h
include/diagramEditor/diagramEditorWizard.h
include/diagramEditor/wizardBusTableDelegate.h
@ -38,6 +40,7 @@ set(DIAGRAMCAVAS_HEADER_FILES
include/diagramEditor/diagramEditorBaseBlock.h
include/diagramEditor/diagramEditorStructContainer.h
include/diagramEditor/diagramEditorBaySettingDlg.h
include/diagramEditor/diagramEditorTransSettingDlg.h
include/graphicsDataModel/baseModel.h
include/graphicsDataModel/fixedPortsModel.h
include/graphicsItem/electricConnectLineItem.h
@ -105,7 +108,9 @@ set(DIAGRAMCAVAS_SOURCE_FILES
source/diagramEditor/editRowData.cpp
source/diagramEditor/editMainRect.cpp
source/diagramEditor/editItem.cpp
source/diagramEditor/editBus.cpp
source/diagramEditor/editItems.cpp
source/diagramEditor/editContainerItem.cpp
source/diagramEditor/editBlock.cpp
source/diagramEditor/editBaseStruct.cpp
source/diagramEditor/diagramEditorWizard.cpp
source/diagramEditor/wizardBusTableDelegate.cpp
@ -113,6 +118,7 @@ set(DIAGRAMCAVAS_SOURCE_FILES
source/diagramEditor/diagramEditorBaseBlock.cpp
source/diagramEditor/diagramEditorStructContainer.cpp
source/diagramEditor/diagramEditorBaySettingDlg.cpp
source/diagramEditor/diagramEditorTransSettingDlg.cpp
source/graphicsDataModel/baseModel.cpp
source/graphicsDataModel/fixedPortsModel.cpp
source/graphicsItem/electricConnectLineItem.cpp
@ -163,6 +169,7 @@ set(UI_FILES
ui/bayManagerDlg.ui
ui/bayManagerContentDlg.ui
ui/diagramEditorBaySettingDlg.ui
ui/diagramEditorTransSettingDlg.ui
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)

View File

@ -53,7 +53,7 @@ public slots:
void onSignal_createEditPanel(QString);
EditPanel* onSignal_addEditPanel(QString);
void onSignal_addEditWizard(QString);
void onSignal_wizardFinished(DiagramEditorWizardInfo);
void onSignal_wizardFinished();
/*********************************间隔**************************************/
void onSignl_openCurrentBay();
private:

View File

@ -27,7 +27,7 @@ public:
virtual DiagramEditorStructContainer* getCurContainer() {return _curContainer;}
protected:
QString sName;
int nType; //1母线,2间隔
int nType; //1母线,2间隔,3变压器
QList<DiagramEditorBriefConnect> lstCon; //连接信息
DiagramEditorStructContainer* _curContainer; //当前所处的容器
};
@ -65,4 +65,16 @@ protected:
BayType nBayType;
};
/***************************transformer单元****************************/
class DiagramEditorTransformerBlock:public DiagramEditorBaseBlock
{
Q_OBJECT
public:
DiagramEditorTransformerBlock(QObject *parent = 0);
virtual ~DiagramEditorTransformerBlock();
virtual void setTransType(TransformerType typ) {nTransType = typ;}
virtual TransformerType getTransType() {return nTransType;}
protected:
TransformerType nTransType;
};
#endif

View File

@ -0,0 +1,40 @@
#ifndef DIAGRAMEDITORTRANSSETTINGDLG_H
#define DIAGRAMEDITORTRANSSETTINGDLG_H
#include <QDialog>
#include "global.h"
QT_BEGIN_NAMESPACE
namespace Ui { class diagramEditorTransSettingDlg; }
QT_END_NAMESPACE
class DiagramEditorWizard;
class DiagramEditorTransformerBlock;
class DiagramEditorTransSettingDlg : public QDialog
{
Q_OBJECT
public:
DiagramEditorTransSettingDlg(QWidget *parent = nullptr);
~DiagramEditorTransSettingDlg();
void initial();
void setParent(DiagramEditorWizard* p) {_pWizard = p;}
void showDlg();
void showDlg(DiagramEditorTransformerBlock*);
void addNewTrans();
public slots:
void onAddClicked();
void onDeleteClicked();
void onOkClicked();
void onCancelClicked();
void onConnectLevelChanged(const QString&); //连接层级改变信号
void onBayTypeChanged(int n);
private:
Ui::diagramEditorTransSettingDlg *ui;
DiagramEditorWizard* _pWizard;
int _curModel; //0新增1修改
DiagramEditorTransformerBlock* _curOperateBlock; //当前修改对象
};
#endif

View File

@ -13,6 +13,7 @@ class DiagramEditorBaseBlock;
class DiagramEditorStructContainer;
class QListWidgetItem;
class DiagramEditorBaySettingDlg;
class DiagramEditorTransSettingDlg;
class DiagramEditorWizard : public QDialog
{
@ -21,7 +22,7 @@ public:
DiagramEditorWizard(QWidget *parent = nullptr);
~DiagramEditorWizard();
signals:
void wizardFinish(DiagramEditorWizardInfo);
void wizardFinish();
public slots:
void onOkClicked();
void onCancelClicked();
@ -32,34 +33,40 @@ public slots:
void onAddBayClicked(); //添加间隔
void onAddTransClicked(); //添加变压器
void onAddBayFinished(DiagramEditorWizardBayInfo); //添加间隔完毕
void onAddTransFinished(DiagramEditorWizardTransformerInfo); //添加变压器完毕
void onDelegateFinishEdit(const QModelIndex &index, const QString &value); //代理edit完成事件
void onBusDeleteClicked();
void onBusIndexRbtnClicked(const QPoint &pos); //bus列表右键菜单
void onTransDeleteClicked();
void onTransModifyClicked();
void onTransIndexRbtnClicked(const QPoint &pos); //变压器列表右键菜单
void onBayListSelected(QListWidgetItem* pItem); //baylist选择事件
public:
QMap<int,DiagramEditorWizardBusInfo> getMapBusInfo() {return _mapBus;}
QMap<int,QMap<int,DiagramEditorStructContainer*>> getCointainerStruct(){return _mapSturctContainer;}
QList<DiagramEditorBaseBlock*> getTargetLevelBlocks(int nLevel,int nType); //返回指定层数的对应blocktype:1母线,2间隔
QList<DiagramEditorBaseBlock*> getTargetLevelBlocks(int nLevel,int nType); //返回指定层数的对应blocktype:1母线,2间隔,3变压器
DiagramEditorStructContainer* getContainerByBlock(int nLevel,int nType,QString sName); //根据block名称返回container
DiagramEditorBaseBlock* getBlockByName(int nLevel,int nType,QString sName); //根据名称返回block
bool removeBlockByName(int nLevel,int nType,const QString& sName); //依据名称删除block
WizardBayContentDlg* getContentDlg() {return _bayContentDlg;}
DiagramEditorBaySettingDlg* getBaySettingDlg() {return _baySettingDlg;}
void flushTransPage(); //刷新变压器界面
private:
void initial();
void reOrderBus(); //重置bus次序
void generateBayStruct(); //根据bus设置生成bay结构
void showSelectedBayPage(int); //显示选中的bay页面
void addTransformer(DiagramEditorWizardTransformerInfo); //界面上添加变压器
template <typename T> void reindexQMap(QMap<int, T> &map); //重新排序函数
private:
Ui::diagramEditorWizard *ui;
BiDirectionalMap<int,QString> _divideType; //划分段数名对照
WizardBayContentDlg* _bayContentDlg;
DiagramEditorBaySettingDlg* _baySettingDlg;
DiagramEditorTransSettingDlg* _transSettingDlg;
QMap<int,DiagramEditorWizardBusInfo> _mapBus; //母线信息
QMap<int,QMap<int,DiagramEditorStructContainer*>> _mapSturctContainer; //划分后的区块
bool _busPageChanged; //母线页改变
};

View File

@ -1,7 +1,7 @@
#ifndef EDITBASESTRUCT_H
#define EDITBASESTRUCT_H
//编辑器基础结构,母线,母线下的一行回路
//编辑器基础空间结构
#include <QGraphicsWidget>
#include "global.h"

View File

@ -0,0 +1,22 @@
#ifndef EDITBLOCK_H
#define EDITBLOCK_H
//编辑器模块结构(分段母线、间隔、变压器等)
#include <QGraphicsWidget>
#include "diagramEditor/editBaseStruct.h"
class EditBlock : public EditBaseStruct
{
Q_OBJECT
public:
EditBlock(QGraphicsItem *parent = nullptr);
~EditBlock();
void setupUI();
void setName(QString s) {_sName = s;}
protected:
void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
private:
QString _sName;
};
#endif

View File

@ -1,22 +0,0 @@
#ifndef EDITBUS_H
#define EDITBUS_H
//编辑器母线单元
#include <QGraphicsWidget>
#include "diagramEditor/editBaseStruct.h"
class EditBus : public EditBaseStruct
{
Q_OBJECT
public:
EditBus(QGraphicsItem *parent = nullptr);
~EditBus();
void setupUI();
void setName(QString s) {_sName = s;}
protected:
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
private:
QString _sName;
};
#endif

View File

@ -0,0 +1,17 @@
#ifndef EDITCONTAINERITEM_H
#define EDITCONTAINERITEM_H
//存放间隔、分段母线、变压器的实体
#include <QGraphicsWidget>
class EditContainerItem : public QGraphicsWidget
{
Q_OBJECT
public:
EditContainerItem(QGraphicsItem *parent = nullptr);
~EditContainerItem();
void setupUI();
protected:
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
};
#endif

View File

@ -0,0 +1,62 @@
#ifndef EDITITEMS_H
#define EDITITEMS_H
//组态过程中的item
#include <QGraphicsObject>
#include "global.h"
class EditBaseItem : public QGraphicsObject
{
Q_OBJECT
public:
EditBaseItem(QGraphicsItem *parent = nullptr);
virtual ~EditBaseItem();
virtual void setName(const QString& s){sName = s;}
virtual QString getName(){return sName;}
virtual void setType(EditorItemType tpe) {nType = tpe;}
virtual EditorItemType getType(){return nType;}
virtual void setBoundingRect(QRectF rec) {m_boundingRect = rec;}
virtual QRectF boundingRect() {return m_boundingRect;}
protected:
virtual QPainterPath shape();
protected:
QString sName;
EditorItemType nType;
QRectF m_boundingRect;
};
/********************bus*********************/
class EditBusItem: public EditBaseItem
{
Q_OBJECT
public:
EditBusItem(QGraphicsItem *parent = nullptr);
virtual ~EditBusItem();
protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
};
/********************bay*********************/
class EditBayItem: public EditBaseItem
{
Q_OBJECT
public:
EditBayItem(QGraphicsItem *parent = nullptr);
virtual ~EditBayItem();
protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
};
/********************trans*********************/
class EditTransItem: public EditBaseItem
{
Q_OBJECT
public:
EditTransItem(QGraphicsItem *parent = nullptr);
virtual ~EditTransItem();
protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
};
#endif

View File

@ -21,15 +21,11 @@ public:
EditPanel(QWidget *parent = nullptr);
~EditPanel();
void initByWizardInfo(DiagramEditorWizardInfo);
protected:
void resizeEvent(QResizeEvent* e);
void initByWizardInfo();
public slots:
void onAddCLicked();
void onWidthChanged(int width);
private:
void initial();
int calHeight();
private:
EditView* m_pEditView;
EditScene* m_pEditScene;
@ -40,7 +36,6 @@ private:
QGraphicsProxyWidget* m_addBtnPro;
int _maxWidth;
int _maxHeight;
int _curRow;
QList<EditRowData*> _lstData;
QMap<int,QMap<int,EditBaseStruct*>> _mapStruct;
};

View File

@ -6,26 +6,15 @@
#include "diagramEditor/editBaseStruct.h"
class QPushButton;
class QGraphicsProxyWidget;
class EditItem;
class EditRowData : public EditBaseStruct
{
Q_OBJECT
public:
EditRowData(QGraphicsItem *parent = nullptr);
~EditRowData();
int addItems(int);
signals:
void widthChanged(int width);
public slots:
void addItem();
private:
int calWidth();
QGraphicsLinearLayout* m_layout;
QPushButton* _btnAdd;
QList<EditItem*> _lstItem;;
};
#endif

View File

@ -375,15 +375,15 @@ void DiagramCavas::onSignal_addEditWizard(QString name)
{
if(_pEditorWizard == nullptr){
_pEditorWizard = new DiagramEditorWizard(this);
connect(_pEditorWizard,&DiagramEditorWizard::wizardFinish,this,[&,name](DiagramEditorWizardInfo info){
connect(_pEditorWizard,&DiagramEditorWizard::wizardFinish,this,[&,name](){
EditPanel* pPanel = onSignal_addEditPanel(name);
pPanel->initByWizardInfo(info);
pPanel->initByWizardInfo();
});
}
_pEditorWizard->show();
}
void DiagramCavas::onSignal_wizardFinished(DiagramEditorWizardInfo info)
void DiagramCavas::onSignal_wizardFinished()
{
}

View File

@ -86,3 +86,14 @@ DiagramEditorBayBlock::~DiagramEditorBayBlock()
{
}
/***************************transformer单元****************************/
DiagramEditorTransformerBlock::DiagramEditorTransformerBlock(QObject *parent)
:DiagramEditorBaseBlock(parent)
{
nTransType = TransformerType::twoWinding;
}
DiagramEditorTransformerBlock::~DiagramEditorTransformerBlock()
{
}

View File

@ -13,6 +13,7 @@ DiagramEditorBaySettingDlg::DiagramEditorBaySettingDlg(QWidget *parent)
{
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());
this->setWindowModality(Qt::WindowModal);
initial();
}
@ -67,6 +68,8 @@ void DiagramEditorBaySettingDlg::addNewBay()
if(_pWizard){
auto mapAllCon = _pWizard->getCointainerStruct();
for(auto iter = mapAllCon.begin();iter != mapAllCon.end();++iter){
if(iter.key() == g_transformerLevel)
continue;
ui->cb_level->addItem(""+QString::number(iter.key()+1)+"",iter.key());
}
}

View File

@ -0,0 +1,190 @@
#include <QMessageBox>
#include "diagramEditor/diagramEditorTransSettingDlg.h"
#include "diagramEditor/diagramEditorWizard.h"
#include "diagramEditor/diagramEditorBaseBlock.h"
#include "ui_diagramEditorTransSettingDlg.h"
#include "diagramEditor/diagramEditorStructContainer.h"
#include "diagramEditor/wizardBayContentDlg.h"
DiagramEditorTransSettingDlg::DiagramEditorTransSettingDlg(QWidget *parent)
: QDialog(parent)
, ui(new Ui::diagramEditorTransSettingDlg)
,_curOperateBlock(nullptr)
{
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());
this->setWindowModality(Qt::WindowModal);
initial();
}
DiagramEditorTransSettingDlg::~DiagramEditorTransSettingDlg()
{
delete ui;
}
void DiagramEditorTransSettingDlg::showDlg()
{
_curModel = 0;
show();
addNewTrans();
if(_pWizard){
ui->le_name->setText("#主变");
}
}
void DiagramEditorTransSettingDlg::showDlg(DiagramEditorTransformerBlock* p)
{
_curModel = 1;
if(_curOperateBlock == nullptr)
_curOperateBlock = p;
show();
addNewTrans();
if(_pWizard){
ui->le_name->setText(p->getName());
//ui->cb_level->setCurrentIndex(0);
if(p){
auto lstCon = p->getConnect();
QStringList lst;
for(auto& con:lstCon){
QString sOppo = con.getOppositeName(p->getName());
lst.append(sOppo);
}
ui->listWidget->addItems(lst);
}
}
}
void DiagramEditorTransSettingDlg::addNewTrans()
{
ui->cb_type->setCurrentIndex(0);
ui->cb_level->clear();
ui->cb_target->clear();
ui->listWidget->clear();
if(_pWizard){
auto mapAllCon = _pWizard->getCointainerStruct();
for(auto iter = mapAllCon.begin();iter != mapAllCon.end();++iter){
if(iter.key() == g_transformerLevel)
continue;
ui->cb_level->addItem(""+QString::number(iter.key()+1)+"",iter.key());
}
}
}
void DiagramEditorTransSettingDlg::initial()
{
_curModel = 0;
connect(ui->btn_add,&QPushButton::clicked,this,&DiagramEditorTransSettingDlg::onAddClicked);
connect(ui->btn_delete,&QPushButton::clicked,this,&DiagramEditorTransSettingDlg::onDeleteClicked);
connect(ui->btn_ok,&QPushButton::clicked,this,&DiagramEditorTransSettingDlg::onOkClicked);
connect(ui->btn_cancel,&QPushButton::clicked,this,&DiagramEditorTransSettingDlg::onCancelClicked);
connect(ui->cb_level,&QComboBox::currentTextChanged,this,&DiagramEditorTransSettingDlg::onConnectLevelChanged);
connect(ui->cb_bayType,&QComboBox::currentIndexChanged,this,&DiagramEditorTransSettingDlg::onBayTypeChanged);
ui->cb_bayType->setItemData(0,3); //将类型与item关联
ui->cb_bayType->setItemData(1,4);
}
void DiagramEditorTransSettingDlg::onAddClicked()
{
QString str = ui->cb_target->currentText();
auto lst = ui->listWidget->findItems(str,Qt::MatchExactly);
if(lst.size() == 0){ //为空才添加
ui->listWidget->addItem(str);
}
}
void DiagramEditorTransSettingDlg::onDeleteClicked()
{
int n = ui->listWidget->currentRow();
if(n){
auto pItem = ui->listWidget->takeItem(n);
delete pItem;
}
}
void DiagramEditorTransSettingDlg::onOkClicked()
{
QString sName = ui->le_name->text();
TransformerType nType = TransformerType(ui->cb_type->currentIndex());
if(_curModel == 0){
auto lstBlock = _pWizard->getTargetLevelBlocks(g_transformerLevel,3);
for(auto bay:lstBlock)
{
if(bay->getName() == sName){ //判断间隔存在
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"变压器已存在"));
return;
}
}
QStringList lst;
for(int i = 0;i < ui->listWidget->count();++i){
lst.append(ui->listWidget->item(i)->text());
}
DiagramEditorWizardTransformerInfo info;
info.sName = sName;
info.nType = nType;
info.lstBindObj = lst;
_pWizard->onAddTransFinished(info);
}
else if(_curModel == 1){
if(_curOperateBlock){
_curOperateBlock->setName(sName);
_curOperateBlock->setTransType(nType);
_curOperateBlock->clearConnect();
for(int i = 0;i < ui->listWidget->count();++i){
_curOperateBlock->addConnect(ui->listWidget->item(i)->text(),1,true);
}
_pWizard->flushTransPage();
_curOperateBlock = nullptr;
}
}
hide();
}
void DiagramEditorTransSettingDlg::onCancelClicked()
{
hide();
}
void DiagramEditorTransSettingDlg::onConnectLevelChanged(const QString& str)
{
if(_pWizard){
int n = ui->cb_level->findText(str);
BayType nType = BayType(ui->cb_bayType->currentData().toInt());
if(n != -1){
ui->cb_target->clear();
int nIndex = ui->cb_level->itemData(n).toInt();
auto lstBlock = _pWizard->getTargetLevelBlocks(nIndex,2);
for(auto& block:lstBlock){
auto pBay = dynamic_cast<DiagramEditorBayBlock*>(block);
if(pBay){
BayType tpe = pBay->getBayType();
if(nType == tpe)
ui->cb_target->addItem(pBay->getName());
}
}
}
}
}
void DiagramEditorTransSettingDlg::onBayTypeChanged(int idx)
{
BayType nType = BayType(ui->cb_bayType->currentData().toInt());
int n = ui->cb_level->currentIndex();
if(n != -1){
ui->cb_target->clear();
int nIndex = ui->cb_level->itemData(n).toInt();
auto lstBlock = _pWizard->getTargetLevelBlocks(nIndex,2);
for(auto& block:lstBlock){
auto pBay = dynamic_cast<DiagramEditorBayBlock*>(block);
if(pBay){
BayType tpe = pBay->getBayType();
if(nType == tpe)
ui->cb_target->addItem(pBay->getName());
}
}
}
}

View File

@ -7,11 +7,13 @@
#include "diagramEditor/diagramEditorBaseBlock.h"
#include "diagramEditor/diagramEditorStructContainer.h"
#include "diagramEditor/diagramEditorBaySettingDlg.h"
#include "diagramEditor/diagramEditorTransSettingDlg.h"
DiagramEditorWizard::DiagramEditorWizard(QWidget *parent)
: QDialog(parent)
, ui(new Ui::diagramEditorWizard)
,_baySettingDlg(nullptr)
,_transSettingDlg(nullptr)
{
ui->setupUi(this);
_busPageChanged = false;
@ -47,11 +49,21 @@ void DiagramEditorWizard::initial()
ui->tableWidget_bus->setHorizontalHeaderLabels(headerText);
ui->tableWidget_bus->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
headerText.clear();
headerText<<"变压器名称"<<"变压器类型"<<"连接对象";
ui->tableWidget_trans->setContextMenuPolicy(Qt::CustomContextMenu);
ui->tableWidget_trans->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableWidget_trans->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableWidget_trans->setColumnCount(headerText.count());
ui->tableWidget_trans->setHorizontalHeaderLabels(headerText);
ui->tableWidget_trans->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
WizardBusTableDelegate* delegate = new WizardBusTableDelegate(this);
ui->tableWidget_bus->setItemDelegate(delegate);
connect(delegate,&WizardBusTableDelegate::editingFinished,this,&DiagramEditorWizard::onDelegateFinishEdit);
connect(ui->tableWidget_bus, &QTableWidget::customContextMenuRequested, this, &DiagramEditorWizard::onBusIndexRbtnClicked);
connect(ui->tableWidget_trans, &QTableWidget::customContextMenuRequested, this, &DiagramEditorWizard::onTransIndexRbtnClicked);
connect(ui->listWidget_bay,&QListWidget::itemClicked,this,&DiagramEditorWizard::onBayListSelected);
@ -193,9 +205,55 @@ void DiagramEditorWizard::generateBayStruct()
}
}
void DiagramEditorWizard::showSelectedBayPage(int nIdx)
void DiagramEditorWizard::flushTransPage()
{
ui->tableWidget_trans->clearContents();
ui->tableWidget_trans->setRowCount(0);
QList<DiagramEditorBaseBlock*> lst = getTargetLevelBlocks(g_transformerLevel,3);
for(auto& block:lst){
auto pItem = dynamic_cast<DiagramEditorTransformerBlock*>(block);
if(pItem){
DiagramEditorWizardTransformerInfo info;
info.sName = pItem->getName();
info.nType = pItem->getTransType();
auto lstCon = pItem->getConnect(); //获取间隔所连对象的名称
for(auto& con:lstCon){
QString sOpposite = con.getOppositeName(pItem->getName());
info.lstBindObj.append(sOpposite);
}
addTransformer(info);
}
}
}
void DiagramEditorWizard::addTransformer(DiagramEditorWizardTransformerInfo info)
{
int row = ui->tableWidget_trans->rowCount();
ui->tableWidget_trans->insertRow(row);
//名称
QTableWidgetItem* nameItem = new QTableWidgetItem(info.sName);
ui->tableWidget_trans->setItem(row, 0, nameItem);
QString sType;
switch (info.nType) {
case TransformerType::twoWinding:
sType = "两绕组变压器";
break;
case TransformerType::threeWinding:
sType = "三绕组变压器";
break;
default:
break;
}
//类型
QTableWidgetItem* typeItem = new QTableWidgetItem(sType);
ui->tableWidget_trans->setItem(row, 1, typeItem);
//连接
QTableWidgetItem* connectItem = new QTableWidgetItem(info.lstBindObj.join(""));
ui->tableWidget_trans->setItem(row, 2, connectItem);
}
template <typename T> void DiagramEditorWizard::reindexQMap(QMap<int, T> &map) {
@ -218,9 +276,7 @@ template <typename T> void DiagramEditorWizard::reindexQMap(QMap<int, T> &map) {
void DiagramEditorWizard::onOkClicked()
{
DiagramEditorWizardInfo info;
emit wizardFinish(info);
emit wizardFinish();
hide();
}
@ -275,7 +331,7 @@ void DiagramEditorWizard::onAddBusClicked()
ui->tableWidget_bus->insertRow(row);
// 层级
QTableWidgetItem* levelItem = new QTableWidgetItem(""+QString::number(row)+"");
QTableWidgetItem* levelItem = new QTableWidgetItem(""+QString::number(row+1)+"");
ui->tableWidget_bus->setItem(row, 0, levelItem);
levelItem->setData(Qt::UserRole,row);
@ -312,7 +368,11 @@ void DiagramEditorWizard::onAddBayClicked()
void DiagramEditorWizard::onAddTransClicked()
{
if(_transSettingDlg == nullptr){
_transSettingDlg = new DiagramEditorTransSettingDlg(this);
_transSettingDlg->setParent(this);
}
_transSettingDlg->showDlg();
}
void DiagramEditorWizard::onAddBayFinished(DiagramEditorWizardBayInfo info)
@ -337,6 +397,27 @@ void DiagramEditorWizard::onAddBayFinished(DiagramEditorWizardBayInfo info)
}
}
void DiagramEditorWizard::onAddTransFinished(DiagramEditorWizardTransformerInfo info)
{
auto pContainer = new DiagramEditorStructContainer(this);
auto pTrans = new DiagramEditorTransformerBlock(this);
pTrans->setName(info.sName);
pTrans->setType(3);
pTrans->setTransType(info.nType);
for(auto& sName:info.lstBindObj){
pTrans->addConnect(sName,2);
}
pContainer->insertBlock(1,pTrans);
int nIndex =_mapSturctContainer.value(g_transformerLevel).size();
_mapSturctContainer[g_transformerLevel].insert(nIndex,pContainer);
flushTransPage();
}
void DiagramEditorWizard::onDelegateFinishEdit(const QModelIndex &index, const QString &value)
{
int row = index.row();
@ -436,6 +517,96 @@ void DiagramEditorWizard::onBusIndexRbtnClicked(const QPoint &pos)
menu.exec(ui->tableWidget_bus->mapToGlobal(pos));
}
void DiagramEditorWizard::onTransDeleteClicked()
{
// 获取当前选中的索引
QModelIndexList selectedIndexes = ui->tableWidget_trans->selectionModel()->selectedRows();
if (selectedIndexes.isEmpty()) {
return; // 没有选中任何行
}
// 获取当前选中的第一项索引
QModelIndex index = selectedIndexes.first();
if (!index.isValid()) {
return;
}
QModelIndex indexName = index.sibling(index.row(),0);
QString sName = indexName.data().toString();
DiagramEditorStructContainer* pCon = getContainerByBlock(g_transformerLevel,3,sName);
bool res = removeBlockByName(g_transformerLevel,3,sName);
if(pCon){ //同时删除container(一个container包含一个变压器)
for(auto iter = _mapSturctContainer[g_transformerLevel].begin(); iter != _mapSturctContainer[g_transformerLevel].end();++iter){
if(iter.value() == pCon){
delete pCon;
_mapSturctContainer[g_transformerLevel].erase(iter);
break;
}
}
}
if(res){
flushTransPage();
}
else{
return;
}
int currentRow = ui->tableWidget_trans->currentRow();
if (currentRow == -1) {
return; // 没有选中行
}
ui->tableWidget_trans->removeRow(currentRow);
}
void DiagramEditorWizard::onTransModifyClicked()
{
// 获取当前选中的索引
QModelIndexList selectedIndexes = ui->tableWidget_trans->selectionModel()->selectedRows();
if (selectedIndexes.isEmpty()) {
return; // 没有选中任何行
}
// 获取当前选中的第一项索引
QModelIndex index = selectedIndexes.first();
if (!index.isValid()) {
return;
}
QModelIndex indexName = index.sibling(index.row(),0);
QString sName = indexName.data().toString();
DiagramEditorBaseBlock* pBlock = getBlockByName(g_transformerLevel,3,sName);
if(pBlock){
auto pTran = dynamic_cast<DiagramEditorTransformerBlock*>(pBlock);
if(pTran)
_transSettingDlg->showDlg(pTran);
}
}
void DiagramEditorWizard::onTransIndexRbtnClicked(const QPoint &pos)
{
// 获取当前点击的位置对应的索引
QModelIndex index = ui->tableWidget_bus->indexAt(pos);
if (!index.isValid()) {
return; // 如果点击的是空白区域,直接返回
}
QMenu menu;
QAction *deleteAction = new QAction("移除变压器", this);
QAction *modifyAction = new QAction("修改变压器", this);
menu.addAction(deleteAction);
menu.addAction(modifyAction);
// 连接删除菜单项的触发信号与槽函数
connect(deleteAction, &QAction::triggered, this, &DiagramEditorWizard::onTransDeleteClicked);
connect(modifyAction, &QAction::triggered, this, &DiagramEditorWizard::onTransModifyClicked);
// 在点击位置显示菜单
menu.exec(ui->tableWidget_bus->mapToGlobal(pos));
}
void DiagramEditorWizard::onBayListSelected(QListWidgetItem* pItem)
{
int nIndex = pItem->data(Qt::UserRole).toInt();

View File

@ -0,0 +1,23 @@
#include <QPainter>
#include "diagramEditor/editBlock.h"
EditBlock::EditBlock(QGraphicsItem *parent)
: EditBaseStruct(parent)
{
setupUI();
}
EditBlock::~EditBlock()
{
}
void EditBlock::setupUI()
{
setDataType(DiagramEditorStructType::block);
}
void EditBlock::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
QRectF rec = boundingRect();
painter->drawRect(rec);
}

View File

@ -1,26 +0,0 @@
#include <QPainter>
#include "diagramEditor/editBus.h"
EditBus::EditBus(QGraphicsItem *parent)
: EditBaseStruct(parent)
{
setupUI();
}
EditBus::~EditBus()
{
}
void EditBus::setupUI()
{
setDataType(DiagramEditorStructType::bus);
}
void EditBus::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
QRectF rec = boundingRect();
rec.adjust(0,rec.height()*0.45,0,-rec.height()*0.45);
painter->fillRect(rec, Qt::black);
painter->drawText(QPointF(boundingRect().x(),boundingRect().y()),_sName);
//painter->fillRect(boundingRect(), QColor(224, 238, 238)); // 背景
}

View File

@ -0,0 +1,25 @@
#include <QGraphicsGridLayout>
#include <QPainter>
#include <QSizePolicy>
#include <QGraphicsSceneMouseEvent>
#include "diagramEditor/editContainerItem.h"
EditContainerItem::EditContainerItem(QGraphicsItem *parent)
: QGraphicsWidget(parent)
{
setupUI();
}
EditContainerItem::~EditContainerItem()
{
}
void EditContainerItem::setupUI()
{
}
void EditContainerItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
event->ignore();
}

View File

@ -0,0 +1,70 @@
#include <QPainter>
#include "diagramEditor/editItems.h"
EditBaseItem::EditBaseItem(QGraphicsItem *parent)
: QGraphicsObject(parent)
{
}
EditBaseItem::~EditBaseItem()
{
}
QPainterPath EditBaseItem::shape()
{
QPainterPath path;
path.addRect(m_boundingRect);
return path;
}
/********************bus*********************/
EditBusItem::EditBusItem(QGraphicsItem *parent)
: EditBaseItem(parent)
{
}
EditBusItem::~EditBusItem()
{
}
void EditBusItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
painter->fillRect(m_boundingRect,Qt::black);
}
/********************Bay*********************/
EditBayItem::EditBayItem(QGraphicsItem *parent)
: EditBaseItem(parent)
{
}
EditBayItem::~EditBayItem()
{
}
void EditBayItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
painter->setPen(QColor(100,149,237));
painter->drawRect(m_boundingRect);
}
/********************trans*********************/
EditTransItem::EditTransItem(QGraphicsItem *parent)
: EditBaseItem(parent)
{
}
EditTransItem::~EditTransItem()
{
}
void EditTransItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
}

View File

@ -8,7 +8,7 @@
#include "diagramEditor/editView.h"
#include "diagramEditor/editRowData.h"
#include "diagramEditor/editMainRect.h"
#include "diagramEditor/editBus.h"
#include "diagramEditor/editBlock.h"
#include "global.h"
#include <QDebug>
@ -17,7 +17,6 @@ EditPanel::EditPanel(QWidget *parent)
{
_maxWidth = 0;
_maxHeight = 0;
_curRow = 0;
_layout = new QVBoxLayout(this);
m_pEditScene = new EditScene(this);
//设置场景大小.前两个参数为scene的坐标远点设置到view的中心点后无论view如何缩放secne的坐标原点都不会动方便后续的位置计算
@ -36,91 +35,9 @@ EditPanel::~EditPanel()
}
void EditPanel::initByWizardInfo(DiagramEditorWizardInfo info)
void EditPanel::initByWizardInfo()
{
/*if(info.bus_220_num != 0)
{
if(info.bus_220_num == 1)
{
QString pre = "220KV母分";
QMap<int,EditBaseStruct*> mapBus; //母线
QMap<int,EditBaseStruct*> mapRowData; //一段母线对应一行数据
int colCount = 0;
QGraphicsLinearLayout* layoutBus = new QGraphicsLinearLayout();
QGraphicsLinearLayout* layoutRowData = new QGraphicsLinearLayout();
layoutBus->setSpacing(40);
layoutRowData->setSpacing(20);
int nPer = 0;
int nLeft = 0;
nPer = info.bus_220_circuit/info.bus_220_division;
nLeft = info.bus_220_circuit%info.bus_220_division;
for(int i = 0; i <info.bus_220_division;++i){
EditBus* pBus = new EditBus(_mainWidget);
EditRowData* rowData = new EditRowData(_mainWidget);
pBus->setName(pre+QString::number(i+1));
layoutBus->addItem(pBus);
layoutRowData->addItem(rowData);
layoutBus->setMaximumHeight(g_dEditorItem_Height);
layoutRowData->setMaximumHeight(g_dEditorItem_Height);
int nMinWidth = -1; //每个结构大小
if(nLeft > 0){
nMinWidth = rowData->addItems(nPer+1);
nLeft -= 1;
}
else{
nMinWidth = rowData->addItems(nPer);
}
if(nMinWidth == -1)
pBus->setMinimumWidth(g_dEditorItem_Width);
else
pBus->setMinimumWidth(nMinWidth);
colCount += 1;
}
layoutBus->addStretch();
layoutRowData->addStretch();
_widgetLayout->addItem(layoutBus);
_widgetLayout->addItem(layoutRowData);
}
}
_widgetLayout->addStretch();*/
}
void EditPanel::resizeEvent(QResizeEvent* e)
{
}
void EditPanel::onAddCLicked()
{
/*EditRowData* row = new EditRowData(_mainWidget);
connect(row,&EditRowData::widthChanged,this,&EditPanel::onWidthChanged);
int nRow = _widgetLayout->rowCount();
_widgetLayout->addItem(row,nRow,1);
_widgetLayout->removeItem(m_addBtnPro);
_widgetLayout->addItem(m_addBtnPro,nRow,0);
_widgetLayout->setAlignment(m_addBtnPro,Qt::AlignCenter);
_widgetLayout->setColumnMaximumWidth(1,g_dEditorItem_Width);
_widgetLayout->setRowMaximumHeight(nRow,g_dEditorItem_Height);
_widgetLayout->setColumnMinimumWidth(1,g_dEditorItem_Width);
_widgetLayout->setRowMinimumHeight(nRow,g_dEditorItem_Height);
_lstData.append(row);
int height = calHeight();
if(height > _maxHeight){
QRectF rec = m_pEditScene->itemsBoundingRect();
if(rec.width() < _maxWidth)
m_pEditScene->setSceneRect(rec.x(),rec.y(),_maxWidth,height);
else
m_pEditScene->setSceneRect(rec); // 强制更新场景尺寸
m_pEditView->viewport()->update();
_maxHeight = height;
}
qDebug()<<m_pEditScene->itemsBoundingRect();*/
_widgetLayout->addStretch();
}
void EditPanel::onWidthChanged(int width)
@ -131,7 +48,6 @@ void EditPanel::onWidthChanged(int width)
int x = _mainWidget->geometry().width();
int y = _mainWidget->geometry().y();
_mainWidget->setGeometry(x,y,_maxWidth,_maxHeight);
//m_pEditScene->setSceneRect(m_pEditScene->itemsBoundingRect());
m_pEditScene->setSceneRect(x,y,_maxWidth,_maxHeight);
m_pEditView->viewport()->update();
//qDebug()<<m_pEditScene->sceneRect();
@ -149,27 +65,4 @@ void EditPanel::initial()
_maxWidth = _mainWidget->rect().width();
_maxHeight = _mainWidget->rect().height();
m_pEditView->centerOn(0,0);
// 添加主按钮
/*QPushButton* m_addBtn = new QPushButton("Add Row");
m_addBtnPro = new QGraphicsProxyWidget;
m_addBtnPro->setWidget(m_addBtn);
_widgetLayout->addItem(m_addBtnPro,0,0);
_widgetLayout->setAlignment(m_addBtnPro,Qt::AlignCenter);
_widgetLayout->activate();
_widgetLayout->setColumnMaximumWidth(0,g_dEditorItem_Width);
_widgetLayout->setRowMaximumHeight(0,g_dEditorItem_Height);
connect(m_addBtn,&QPushButton::clicked,this,&EditPanel::onAddCLicked);*/
}
int EditPanel::calHeight()
{
int height = 0;
for(auto &data:_lstData)
{
height += data->rect().height()+6+18;
}
height += m_addBtnPro->rect().height();
return height;
}

View File

@ -2,7 +2,6 @@
#include <QGraphicsProxyWidget>
#include <QPushButton>
#include "diagramEditor/editRowData.h"
#include "diagramEditor/editItem.h"
#include "global.h"
@ -11,16 +10,10 @@ EditRowData::EditRowData(QGraphicsItem *parent)
{
m_layout = new QGraphicsLinearLayout(Qt::Horizontal, this);
// 添加按钮
//_btnAdd = new QPushButton("Add Item");
//QGraphicsProxyWidget* btnProxy = new QGraphicsProxyWidget(this);
//m_layout->addItem(btnProxy);
//m_layout->setAlignment(btnProxy,Qt::AlignCenter);
//btnProxy->setWidget(_btnAdd);
m_layout->addStretch();
m_layout->setSpacing(6);
//connect(_btnAdd, &QPushButton::clicked, this, &EditRowData::addItem);
setDataType(DiagramEditorStructType::rowData);
}
EditRowData::~EditRowData()
@ -28,46 +21,9 @@ EditRowData::~EditRowData()
}
int EditRowData::addItems(int n)
{
if(n < 1)
return -1;
for(int i = 0;i < n; ++i)
{
EditItem* pItem = new EditItem(this);
pItem->setMaximumSize(g_dEditorItem_Width, g_dEditorItem_Height);
pItem->setMinimumSize(g_dEditorItem_Width, g_dEditorItem_Height);
_lstItem.append(pItem);
m_layout->insertItem(0,pItem);
m_layout->setStretchFactor(pItem,0);
}
int nWidth = calWidth();
setMinimumWidth(nWidth);
return nWidth;
}
void EditRowData::addItem()
{
EditItem* pItem = new EditItem(this);
pItem->setMaximumSize(g_dEditorItem_Width, g_dEditorItem_Height);
pItem->setMinimumSize(g_dEditorItem_Width, g_dEditorItem_Height);
int nWidth = calWidth();
setMinimumWidth(nWidth);
_lstItem.append(pItem);
m_layout->insertItem(m_layout->count()-1,pItem);
m_layout->setStretchFactor(pItem,1);
emit widthChanged(nWidth);
}
int EditRowData::calWidth()
{
int width = 0;
for(auto &pro:_lstItem)
{
width += pro->rect().width()+6;
}
//width += _btnAdd->width()+250; //100为add按钮的宽度
return width;
}

View File

@ -0,0 +1,281 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>diagramEditorTransSettingDlg</class>
<widget class="QDialog" name="diagramEditorTransSettingDlg">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>425</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(196, 196, 196);</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(0, 0, 0);</string>
</property>
<property name="text">
<string>设置变压器</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>460</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_2" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>基本信息</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,1,0,1">
<property name="spacing">
<number>6</number>
</property>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>变压器名称</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_name"/>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>变压器类型</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_type">
<item>
<property name="text">
<string>两绕组变压器</string>
</property>
</item>
<item>
<property name="text">
<string>三绕组变压器</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>连接信息</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="horizontalSpacing">
<number>20</number>
</property>
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout" rowstretch="1,1,1,0" columnstretch="1,2">
<property name="verticalSpacing">
<number>10</number>
</property>
<item row="2" column="1">
<widget class="QComboBox" name="cb_target"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>间隔位置</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>间隔类型</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cb_level"/>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="cb_bayType">
<item>
<property name="text">
<string>进线间隔</string>
</property>
</item>
<item>
<property name="text">
<string>出线间隔</string>
</property>
</item>
</widget>
</item>
<item row="3" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>10</number>
</property>
<item>
<widget class="QPushButton" name="btn_add">
<property name="text">
<string>添加</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_delete">
<property name="text">
<string>删除</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>间隔名称</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1" rowspan="2">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>连接列表</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="listWidget"/>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>155</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btn_ok">
<property name="text">
<string>确定</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_cancel">
<property name="text">
<string>取消</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -180,7 +180,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
<number>6</number>
</property>
<property name="topMargin">
<number>0</number>