瀏覽代碼

界面布局修改

main
email 1 天之前
父節點
當前提交
8273b223f7
共有 2 個檔案被更改,包括 40 行新增29 行删除
  1. +31
    -23
      untitled/mainwindow.cpp
  2. +9
    -6
      untitled/plcdocument.cpp

+ 31
- 23
untitled/mainwindow.cpp 查看文件

@@ -17,15 +17,15 @@
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QTextEdit> #include <QTextEdit>
#include<QDockWidget>
#include <QDockWidget>
#include <QStatusBar>

MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
{ {
setWindowTitle("综合平台编程器"); setWindowTitle("综合平台编程器");
setGeometry(500, 200, 1000, 700); setGeometry(500, 200, 1000, 700);

// 初始化标签页
m_tabWidget = new QTabWidget(this);
m_tabWidget = new QTabWidget(this);// 初始化标签页
m_tabWidget->setTabsClosable(true); m_tabWidget->setTabsClosable(true);
setCentralWidget(m_tabWidget); setCentralWidget(m_tabWidget);
connect(m_tabWidget, &QTabWidget::currentChanged, this, &MainWindow::onTabChanged); connect(m_tabWidget, &QTabWidget::currentChanged, this, &MainWindow::onTabChanged);
@@ -38,33 +38,31 @@ MainWindow::MainWindow(QWidget *parent)
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
} }

void MainWindow::createLogPanel() void MainWindow::createLogPanel()
{ {
// 创建可停靠窗口 // 创建可停靠窗口
m_logDock = new QDockWidget("消息输出", this); m_logDock = new QDockWidget("消息输出", this);
// 设置为只能在底部停靠
m_logDock->setAllowedAreas(Qt::BottomDockWidgetArea); m_logDock->setAllowedAreas(Qt::BottomDockWidgetArea);
m_logDock->setFeatures(QDockWidget::DockWidgetClosable | m_logDock->setFeatures(QDockWidget::DockWidgetClosable |
QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetMovable |
QDockWidget::DockWidgetFloatable); // 添加垂直标题栏
QDockWidget::DockWidgetFloatable);


// 设置高度范围而非固定高度
m_logDock->setMinimumHeight(150);
m_logDock->setMinimumHeight(150);//设置高度范围
m_logDock->setMaximumHeight(400); m_logDock->setMaximumHeight(400);


// 创建主内容部件
QWidget* logWidget = new QWidget;
QWidget* logWidget = new QWidget;// 创建主内容部件
QVBoxLayout* logLayout = new QVBoxLayout; QVBoxLayout* logLayout = new QVBoxLayout;
logLayout->setContentsMargins(2, 2, 2, 2); logLayout->setContentsMargins(2, 2, 2, 2);


// 创建文本编辑框用于显示日志
m_logEdit = new QTextEdit;
m_logEdit = new QTextEdit;// 创建文本编辑框用于显示日志
m_logEdit->setReadOnly(true); m_logEdit->setReadOnly(true);
m_logEdit->setFont(QFont("Consolas", 10)); m_logEdit->setFont(QFont("Consolas", 10));
m_logEdit->setStyleSheet("background-color: #f8f8f8; border: 1px solid #d9d9d9;"); m_logEdit->setStyleSheet("background-color: #f8f8f8; border: 1px solid #d9d9d9;");
m_logEdit->setMinimumHeight(100); m_logEdit->setMinimumHeight(100);


// 创建控制按钮
QHBoxLayout* btnLayout = new QHBoxLayout;
QHBoxLayout* btnLayout = new QHBoxLayout;// 创建控制按钮
m_clearLogBtn = new QPushButton("清空日志"); m_clearLogBtn = new QPushButton("清空日志");


btnLayout->addWidget(m_clearLogBtn); btnLayout->addWidget(m_clearLogBtn);
@@ -76,6 +74,7 @@ void MainWindow::createLogPanel()
logWidget->setLayout(logLayout); logWidget->setLayout(logLayout);


m_logDock->setWidget(logWidget); m_logDock->setWidget(logWidget);
// 添加到底部dock区域,这会使它横跨整个窗口宽度
addDockWidget(Qt::BottomDockWidgetArea, m_logDock); addDockWidget(Qt::BottomDockWidgetArea, m_logDock);


// 初始显示状态 // 初始显示状态
@@ -84,6 +83,7 @@ void MainWindow::createLogPanel()
// 连接信号 // 连接信号
connect(m_clearLogBtn, &QPushButton::clicked, this, &MainWindow::onClearLogButtonClicked); connect(m_clearLogBtn, &QPushButton::clicked, this, &MainWindow::onClearLogButtonClicked);
} }

// 槽函数实现 // 槽函数实现
void MainWindow::onClearLogButtonClicked() void MainWindow::onClearLogButtonClicked()
{ {
@@ -103,7 +103,7 @@ void MainWindow::createMenus()
QMenu *fileMenu = menuBar()->addMenu("文件"); QMenu *fileMenu = menuBar()->addMenu("文件");
QMenu *editMenu = menuBar()->addMenu("操作"); QMenu *editMenu = menuBar()->addMenu("操作");


// 设置菜单项字体大小(适用于所有子菜单)
// 设置菜单项字体大小
QFont itemFont = fileMenu->font(); QFont itemFont = fileMenu->font();
itemFont.setPointSize(12); // 菜单项文字大小 itemFont.setPointSize(12); // 菜单项文字大小
fileMenu->setFont(itemFont); fileMenu->setFont(itemFont);
@@ -146,6 +146,7 @@ void MainWindow::createMenus()
m_saveAsAction->setFont(itemFont); m_saveAsAction->setFont(itemFont);
connect(m_saveAsAction, &QAction::triggered, this, &MainWindow::onSaveAs); connect(m_saveAsAction, &QAction::triggered, this, &MainWindow::onSaveAs);
fileMenu->addAction(m_saveAsAction); fileMenu->addAction(m_saveAsAction);

// 操作菜单 - 添加复制、粘贴、删除功能 // 操作菜单 - 添加复制、粘贴、删除功能
QAction *copyAction = new QAction("复制(&C)", this); QAction *copyAction = new QAction("复制(&C)", this);
copyAction->setShortcut(QKeySequence::Copy); copyAction->setShortcut(QKeySequence::Copy);
@@ -453,13 +454,13 @@ void MainWindow::updateToolBar(BaseDocument *doc)
)"); )");


normallyOpenBtn->installEventFilter(this); 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); drag->exec(Qt::CopyAction);
return true; return true;
} }
// HMI文档处理(原有代码)
// HMI文档处理
if (currentDoc && currentDoc->type() == BaseDocument::HMI) if (currentDoc && currentDoc->type() == BaseDocument::HMI)
{ {
HMIDocument* hmiDoc = static_cast<HMIDocument*>(currentDoc); HMIDocument* hmiDoc = static_cast<HMIDocument*>(currentDoc);
@@ -501,7 +502,7 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{ {
hmiDoc->startDrawingRectangle();//点击生成标志 hmiDoc->startDrawingRectangle();//点击生成标志
} }
// 新增拖拽逻辑(与PLC一致)
// 新增拖拽逻辑
QMimeData *mime = new QMimeData; QMimeData *mime = new QMimeData;
mime->setText(toolType);//传递工具类型("指示灯"或"按钮") mime->setText(toolType);//传递工具类型("指示灯"或"按钮")
QDrag *drag = new QDrag(toolBtn); QDrag *drag = new QDrag(toolBtn);
@@ -535,6 +536,7 @@ void MainWindow::onNewPLC()
m_tabWidget->setCurrentWidget(doc); m_tabWidget->setCurrentWidget(doc);
updateToolBar(doc); // 更新工具栏为PLC工具 updateToolBar(doc); // 更新工具栏为PLC工具
} }

// 标签页切换时更新工具栏 // 标签页切换时更新工具栏
void MainWindow::onTabChanged(int idx) void MainWindow::onTabChanged(int idx)
{ {
@@ -546,6 +548,7 @@ void MainWindow::onTabChanged(int idx)
BaseDocument *doc = dynamic_cast<BaseDocument*>(m_tabWidget->widget(idx)); BaseDocument *doc = dynamic_cast<BaseDocument*>(m_tabWidget->widget(idx));
updateToolBar(doc); updateToolBar(doc);
} }

// 保存文档 // 保存文档
void MainWindow::onSave() void MainWindow::onSave()
{ {
@@ -558,6 +561,7 @@ void MainWindow::onSave()
saveDocument(doc); saveDocument(doc);
} }
} }

// 另存为文档 // 另存为文档
void MainWindow::onSaveAs() void MainWindow::onSaveAs()
{ {
@@ -566,6 +570,7 @@ void MainWindow::onSaveAs()
saveDocumentAs(doc); saveDocumentAs(doc);
} }
} }

// 打开文档 // 打开文档
void MainWindow::onOpen() void MainWindow::onOpen()
{ {
@@ -599,6 +604,7 @@ void MainWindow::onOpen()
delete doc; delete doc;
} }
} }

// 关闭标签页 // 关闭标签页
void MainWindow::onCloseTab(int index) void MainWindow::onCloseTab(int index)
{ {
@@ -624,6 +630,7 @@ void MainWindow::onCloseTab(int index)
m_tabWidget->removeTab(index); m_tabWidget->removeTab(index);
delete doc; delete doc;
} }

// 保存文档 // 保存文档
void MainWindow::saveDocument(BaseDocument *doc) void MainWindow::saveDocument(BaseDocument *doc)
{ {
@@ -647,6 +654,7 @@ void MainWindow::saveDocument(BaseDocument *doc)
} }
} }
} }

// 另存为文档 // 另存为文档
void MainWindow::saveDocumentAs(BaseDocument *doc) void MainWindow::saveDocumentAs(BaseDocument *doc)
{ {


+ 9
- 6
untitled/plcdocument.cpp 查看文件

@@ -54,7 +54,6 @@ PLCDocument::PLCDocument(QWidget *parent)
layout->addWidget(scrollArea); layout->addWidget(scrollArea);
setLayout(layout); setLayout(layout);
m_view->setAcceptDrops(true); m_view->setAcceptDrops(true);

createRealTable(); createRealTable();


connect(m_scene, &QGraphicsScene::selectionChanged, this, [this]() 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); QRectF tableRect(0, 0, m_columns * m_cellSize, m_rows * m_cellSize);
m_tableFrame = new QGraphicsRectItem(tableRect); m_tableFrame = new QGraphicsRectItem(tableRect);
m_tableFrame->setPen(QPen(Qt::black, 2)); 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_tableFrame->setZValue(-10);
m_scene->addItem(m_tableFrame); m_scene->addItem(m_tableFrame);


@@ -491,18 +490,22 @@ bool PLCDocument::tryEndConnection(PLCItem *endItem, TerminalType endTerminal)
int startCol = static_cast<int>(m_connectionStartItem->pos().x() / m_cellSize); int startCol = static_cast<int>(m_connectionStartItem->pos().x() / m_cellSize);
int endCol = static_cast<int>(endItem->pos().x() / m_cellSize); int endCol = static_cast<int>(endItem->pos().x() / m_cellSize);


if (m_startTerminal == LeftTerminal) {
if (endTerminal != RightTerminal) {
if (m_startTerminal == LeftTerminal)
{
if (endTerminal != RightTerminal)
{
QMessageBox::warning(this, "连线错误", "左端子只能连接到其他元件的右端子"); QMessageBox::warning(this, "连线错误", "左端子只能连接到其他元件的右端子");
clearCurrentConnection(); clearCurrentConnection();
return false; return false;
} }
if (startCol <= endCol) {
if (startCol <= endCol)
{
QMessageBox::warning(this, "连线错误", "左端子只能连接到左边元件的右端子"); QMessageBox::warning(this, "连线错误", "左端子只能连接到左边元件的右端子");
clearCurrentConnection(); clearCurrentConnection();
return false; return false;
} }
} else if (m_startTerminal == RightTerminal) {
} else if (m_startTerminal == RightTerminal)
{
if (endTerminal != LeftTerminal) { if (endTerminal != LeftTerminal) {
QMessageBox::warning(this, "连线错误", "右端子只能连接到其他元件的左端子"); QMessageBox::warning(this, "连线错误", "右端子只能连接到其他元件的左端子");
clearCurrentConnection(); clearCurrentConnection();


Loading…
取消
儲存