diff --git a/untitled/mainwindow.cpp b/untitled/mainwindow.cpp index 87274b3..48c40d9 100644 --- a/untitled/mainwindow.cpp +++ b/untitled/mainwindow.cpp @@ -17,15 +17,15 @@ #include #include #include -#include +#include +#include + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setWindowTitle("综合平台编程器"); setGeometry(500, 200, 1000, 700); - - // 初始化标签页 - m_tabWidget = new QTabWidget(this); + m_tabWidget = new QTabWidget(this);// 初始化标签页 m_tabWidget->setTabsClosable(true); setCentralWidget(m_tabWidget); connect(m_tabWidget, &QTabWidget::currentChanged, this, &MainWindow::onTabChanged); @@ -38,33 +38,31 @@ MainWindow::MainWindow(QWidget *parent) MainWindow::~MainWindow() { } + void MainWindow::createLogPanel() { // 创建可停靠窗口 m_logDock = new QDockWidget("消息输出", this); + // 设置为只能在底部停靠 m_logDock->setAllowedAreas(Qt::BottomDockWidgetArea); m_logDock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | - QDockWidget::DockWidgetFloatable); // 添加垂直标题栏 + QDockWidget::DockWidgetFloatable); - // 设置高度范围而非固定高度 - m_logDock->setMinimumHeight(150); + m_logDock->setMinimumHeight(150);//设置高度范围 m_logDock->setMaximumHeight(400); - // 创建主内容部件 - QWidget* logWidget = new QWidget; + QWidget* logWidget = new QWidget;// 创建主内容部件 QVBoxLayout* logLayout = new QVBoxLayout; logLayout->setContentsMargins(2, 2, 2, 2); - // 创建文本编辑框用于显示日志 - m_logEdit = new QTextEdit; + m_logEdit = new QTextEdit;// 创建文本编辑框用于显示日志 m_logEdit->setReadOnly(true); m_logEdit->setFont(QFont("Consolas", 10)); m_logEdit->setStyleSheet("background-color: #f8f8f8; border: 1px solid #d9d9d9;"); m_logEdit->setMinimumHeight(100); - // 创建控制按钮 - QHBoxLayout* btnLayout = new QHBoxLayout; + QHBoxLayout* btnLayout = new QHBoxLayout;// 创建控制按钮 m_clearLogBtn = new QPushButton("清空日志"); btnLayout->addWidget(m_clearLogBtn); @@ -76,6 +74,7 @@ void MainWindow::createLogPanel() logWidget->setLayout(logLayout); m_logDock->setWidget(logWidget); + // 添加到底部dock区域,这会使它横跨整个窗口宽度 addDockWidget(Qt::BottomDockWidgetArea, m_logDock); // 初始显示状态 @@ -84,6 +83,7 @@ void MainWindow::createLogPanel() // 连接信号 connect(m_clearLogBtn, &QPushButton::clicked, this, &MainWindow::onClearLogButtonClicked); } + // 槽函数实现 void MainWindow::onClearLogButtonClicked() { @@ -103,7 +103,7 @@ void MainWindow::createMenus() QMenu *fileMenu = menuBar()->addMenu("文件"); QMenu *editMenu = menuBar()->addMenu("操作"); - // 设置菜单项字体大小(适用于所有子菜单) + // 设置菜单项字体大小 QFont itemFont = fileMenu->font(); itemFont.setPointSize(12); // 菜单项文字大小 fileMenu->setFont(itemFont); @@ -146,6 +146,7 @@ void MainWindow::createMenus() m_saveAsAction->setFont(itemFont); connect(m_saveAsAction, &QAction::triggered, this, &MainWindow::onSaveAs); fileMenu->addAction(m_saveAsAction); + // 操作菜单 - 添加复制、粘贴、删除功能 QAction *copyAction = new QAction("复制(&C)", this); copyAction->setShortcut(QKeySequence::Copy); @@ -453,13 +454,13 @@ void MainWindow::updateToolBar(BaseDocument *doc) )"); normallyOpenBtn->installEventFilter(this); - normallyClosedBtn->installEventFilter(this); - greaterThanBtn->installEventFilter(this); - greaterThanEqualBtn->installEventFilter(this); - lessThanBtn->installEventFilter(this); - lessThanEqualBtn->installEventFilter(this); - equalBtn->installEventFilter(this); - coilBtn->installEventFilter(this); + normallyClosedBtn->installEventFilter(this); + greaterThanBtn->installEventFilter(this); + greaterThanEqualBtn->installEventFilter(this); + lessThanBtn->installEventFilter(this); + lessThanEqualBtn->installEventFilter(this); + equalBtn->installEventFilter(this); + coilBtn->installEventFilter(this); } } @@ -489,7 +490,7 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event) drag->exec(Qt::CopyAction); return true; } - // HMI文档处理(原有代码) + // HMI文档处理 if (currentDoc && currentDoc->type() == BaseDocument::HMI) { HMIDocument* hmiDoc = static_cast(currentDoc); @@ -501,7 +502,7 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event) { hmiDoc->startDrawingRectangle();//点击生成标志 } - // 新增拖拽逻辑(与PLC一致) + // 新增拖拽逻辑 QMimeData *mime = new QMimeData; mime->setText(toolType);//传递工具类型("指示灯"或"按钮") QDrag *drag = new QDrag(toolBtn); @@ -535,6 +536,7 @@ void MainWindow::onNewPLC() m_tabWidget->setCurrentWidget(doc); updateToolBar(doc); // 更新工具栏为PLC工具 } + // 标签页切换时更新工具栏 void MainWindow::onTabChanged(int idx) { @@ -546,6 +548,7 @@ void MainWindow::onTabChanged(int idx) BaseDocument *doc = dynamic_cast(m_tabWidget->widget(idx)); updateToolBar(doc); } + // 保存文档 void MainWindow::onSave() { @@ -558,6 +561,7 @@ void MainWindow::onSave() saveDocument(doc); } } + // 另存为文档 void MainWindow::onSaveAs() { @@ -566,6 +570,7 @@ void MainWindow::onSaveAs() saveDocumentAs(doc); } } + // 打开文档 void MainWindow::onOpen() { @@ -599,6 +604,7 @@ void MainWindow::onOpen() delete doc; } } + // 关闭标签页 void MainWindow::onCloseTab(int index) { @@ -624,6 +630,7 @@ void MainWindow::onCloseTab(int index) m_tabWidget->removeTab(index); delete doc; } + // 保存文档 void MainWindow::saveDocument(BaseDocument *doc) { @@ -647,6 +654,7 @@ void MainWindow::saveDocument(BaseDocument *doc) } } } + // 另存为文档 void MainWindow::saveDocumentAs(BaseDocument *doc) { diff --git a/untitled/plcdocument.cpp b/untitled/plcdocument.cpp index 27fb5f8..0608d12 100644 --- a/untitled/plcdocument.cpp +++ b/untitled/plcdocument.cpp @@ -54,7 +54,6 @@ PLCDocument::PLCDocument(QWidget *parent) layout->addWidget(scrollArea); setLayout(layout); m_view->setAcceptDrops(true); - createRealTable(); connect(m_scene, &QGraphicsScene::selectionChanged, this, [this]() @@ -84,7 +83,7 @@ void PLCDocument::createRealTable() QRectF tableRect(0, 0, m_columns * m_cellSize, m_rows * m_cellSize); m_tableFrame = new QGraphicsRectItem(tableRect); m_tableFrame->setPen(QPen(Qt::black, 2)); - m_tableFrame->setBrush(QBrush(QColor(245, 245, 245))); + m_tableFrame->setBrush(QBrush(QColor(228, 255, 202))); m_tableFrame->setZValue(-10); m_scene->addItem(m_tableFrame); @@ -491,18 +490,22 @@ bool PLCDocument::tryEndConnection(PLCItem *endItem, TerminalType endTerminal) int startCol = static_cast(m_connectionStartItem->pos().x() / m_cellSize); int endCol = static_cast(endItem->pos().x() / m_cellSize); - if (m_startTerminal == LeftTerminal) { - if (endTerminal != RightTerminal) { + if (m_startTerminal == LeftTerminal) + { + if (endTerminal != RightTerminal) + { QMessageBox::warning(this, "连线错误", "左端子只能连接到其他元件的右端子"); clearCurrentConnection(); return false; } - if (startCol <= endCol) { + if (startCol <= endCol) + { QMessageBox::warning(this, "连线错误", "左端子只能连接到左边元件的右端子"); clearCurrentConnection(); return false; } - } else if (m_startTerminal == RightTerminal) { + } else if (m_startTerminal == RightTerminal) + { if (endTerminal != LeftTerminal) { QMessageBox::warning(this, "连线错误", "右端子只能连接到其他元件的左端子"); clearCurrentConnection();