Selaa lähdekoodia

界面布局修改

main
email 1 päivä sitten
vanhempi
commit
8273b223f7
2 muutettua tiedostoa jossa 40 lisäystä ja 29 poistoa
  1. +31
    -23
      untitled/mainwindow.cpp
  2. +9
    -6
      untitled/plcdocument.cpp

+ 31
- 23
untitled/mainwindow.cpp Näytä tiedosto

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

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<HMIDocument*>(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<BaseDocument*>(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)
{


+ 9
- 6
untitled/plcdocument.cpp Näytä tiedosto

@@ -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<int>(m_connectionStartItem->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, "连线错误", "左端子只能连接到其他元件的右端子");
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();


Ladataan…
Peruuta
Tallenna