|
|
@@ -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) |
|
|
|
{ |
|
|
|