@@ -3,6 +3,7 @@ | |||||
#include <QGraphicsSceneMouseEvent> | #include <QGraphicsSceneMouseEvent> | ||||
#include <QMenu> | #include <QMenu> | ||||
#include <QGraphicsScene> | #include <QGraphicsScene> | ||||
#include <QColorDialog> | |||||
// HmiComponent 基类实现 | // HmiComponent 基类实现 | ||||
HmiComponent::HmiComponent(QGraphicsItem *parent) : QGraphicsObject(parent) | HmiComponent::HmiComponent(QGraphicsItem *parent) : QGraphicsObject(parent) | ||||
@@ -65,19 +66,26 @@ void HmiComponent::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) | |||||
QMenu menu; | QMenu menu; | ||||
QAction *copyAction = menu.addAction("复制"); | QAction *copyAction = menu.addAction("复制"); | ||||
QAction *deleteAction = menu.addAction("删除"); | QAction *deleteAction = menu.addAction("删除"); | ||||
QAction *appearanceAction = menu.addAction("改变外观"); | |||||
// 使用 connect 将菜单动作的触发连接到信号的发射,“复制”和“删除” | |||||
// 使用 connect 将菜单动作的触发连接到信号的发射,复制和删除 | |||||
connect(copyAction, &QAction::triggered, this, [this]() { | connect(copyAction, &QAction::triggered, this, [this]() { | ||||
emit copyRequested(this); | emit copyRequested(this); | ||||
}); | }); | ||||
connect(deleteAction, &QAction::triggered, this, [this]() { | connect(deleteAction, &QAction::triggered, this, [this]() { | ||||
emit deleteRequested(this); | emit deleteRequested(this); | ||||
}); | }); | ||||
connect(appearanceAction, &QAction::triggered, this, &HmiComponent::changeAppearance); | |||||
// 在鼠标光标位置显示菜单 | // 在鼠标光标位置显示菜单 | ||||
menu.exec(event->screenPos()); | menu.exec(event->screenPos()); | ||||
} | } | ||||
void HmiComponent::changeAppearance() | |||||
{ | |||||
emit appearanceChangedRequested(this); | |||||
} | |||||
HmiButton::HmiButton(QGraphicsItem *parent) : HmiComponent(parent) | HmiButton::HmiButton(QGraphicsItem *parent) : HmiComponent(parent) | ||||
{ | { | ||||
m_color = Qt::gray; | m_color = Qt::gray; | ||||
@@ -24,6 +24,7 @@ signals: | |||||
// 为复制和删除请求添加信号 | // 为复制和删除请求添加信号 | ||||
void copyRequested(HmiComponent* item); | void copyRequested(HmiComponent* item); | ||||
void deleteRequested(HmiComponent* item); | void deleteRequested(HmiComponent* item); | ||||
void appearanceChangedRequested(HmiComponent* item); | |||||
public: | public: | ||||
explicit HmiComponent(QGraphicsItem *parent = nullptr); | explicit HmiComponent(QGraphicsItem *parent = nullptr); | ||||
@@ -35,6 +36,9 @@ public: | |||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; | void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; | ||||
public slots: | |||||
void changeAppearance(); | |||||
protected: | protected: | ||||
void mousePressEvent(QGraphicsSceneMouseEvent *event) override; | void mousePressEvent(QGraphicsSceneMouseEvent *event) override; | ||||
// 重写上下文菜单事件 | // 重写上下文菜单事件 | ||||
@@ -30,10 +30,7 @@ signals: | |||||
protected: | protected: | ||||
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) override; | void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) override; | ||||
// 在这里添加下面这行代码 | |||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) override; | void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) override; | ||||
void keyPressEvent(QKeyEvent *keyEvent) override; | void keyPressEvent(QKeyEvent *keyEvent) override; | ||||
void contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent) override; | void contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent) override; | ||||
@@ -6,6 +6,7 @@ | |||||
#include <QMessageBox> | #include <QMessageBox> | ||||
#include <QVBoxLayout> | #include <QVBoxLayout> | ||||
#include <algorithm> | #include <algorithm> | ||||
#include <QColorDialog> | |||||
HMIModule::HMIModule(Ui::MainWindow* ui, QObject *parent) | HMIModule::HMIModule(Ui::MainWindow* ui, QObject *parent) | ||||
: QObject{parent}, ui_(ui), m_scene(nullptr) | : QObject{parent}, ui_(ui), m_scene(nullptr) | ||||
@@ -62,11 +63,10 @@ void HMIModule::setupNewComponent(HmiComponent* item) | |||||
connect(item, &HmiComponent::selected, this, &HMIModule::onComponentSelected); | connect(item, &HmiComponent::selected, this, &HMIModule::onComponentSelected); | ||||
connect(item, &HmiComponent::copyRequested, this, &HMIModule::onCopyRequested); | connect(item, &HmiComponent::copyRequested, this, &HMIModule::onCopyRequested); | ||||
connect(item, &HmiComponent::deleteRequested, this, &HMIModule::onDeleteRequested); | connect(item, &HmiComponent::deleteRequested, this, &HMIModule::onDeleteRequested); | ||||
connect(item, &HmiComponent::appearanceChangedRequested, this, &HMIModule::onChangeAppearanceRequested); // 连接信号 | |||||
QString currentTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); | QString currentTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); | ||||
QString log = QString("[%1] 创建 %2 组件") | |||||
.arg(currentTime) | |||||
.arg(item->componentName()); | |||||
QString log = QString("[%1] 创建 %2 组件").arg(currentTime).arg(item->componentName()); | |||||
emit logMessageGenerated(log); | emit logMessageGenerated(log); | ||||
} | } | ||||
@@ -177,6 +177,14 @@ void HMIModule::onDeleteRequested() | |||||
} | } | ||||
} | } | ||||
void HMIModule::onChangeAppearanceRequested(HmiComponent* item) | |||||
{ | |||||
QColor color = QColorDialog::getColor(item->color(), nullptr, "选择颜色"); | |||||
if (color.isValid()) { | |||||
item->setColor(color); | |||||
} | |||||
} | |||||
// 添加页面后的槽函数 | // 添加页面后的槽函数 | ||||
void HMIModule::onPageAdded(int pageNumber, int index) | void HMIModule::onPageAdded(int pageNumber, int index) | ||||
{ | { | ||||
@@ -195,11 +203,9 @@ void HMIModule::onPageRemoved(int pageNumber, int index) | |||||
} | } | ||||
} | } | ||||
// 确保提供 HMIModule::onComponentSelected 的定义 | |||||
void HMIModule::onComponentSelected(HmiComponent* item) | void HMIModule::onComponentSelected(HmiComponent* item) | ||||
{ | { | ||||
// 在这里添加你的代码 | |||||
// 如果不需要任何操作,可以留空 | |||||
// 不需要任何操作,可以留空 | |||||
} | } | ||||
// 新增页面的槽函数 | // 新增页面的槽函数 | ||||
@@ -208,6 +214,7 @@ void HMIModule::addPage() | |||||
QTabWidget* tabWidget = ui_->tabWidget_2; | QTabWidget* tabWidget = ui_->tabWidget_2; | ||||
int pageNumber; | int pageNumber; | ||||
int insertIndex = -1; | int insertIndex = -1; | ||||
int tabIndex; // 在此处声明 tabIndex | |||||
// 检查是否有可用的页面编号 | // 检查是否有可用的页面编号 | ||||
if (!m_availablePageNumbers.isEmpty()) { | if (!m_availablePageNumbers.isEmpty()) { | ||||
@@ -224,10 +231,8 @@ void HMIModule::addPage() | |||||
} else { | } else { | ||||
pageNumber = ++m_pageCount; | pageNumber = ++m_pageCount; | ||||
} | } | ||||
// 获取 Page 1 的 GraphicsView | |||||
QGraphicsView* firstGraphicsView = ui_->hmiGraphicsView; | |||||
CustomGraphicsScene* firstScene = m_scene; // 获取 Page 1 的 Scene | |||||
// 获取 Page 1 的 Scene | |||||
CustomGraphicsScene* firstScene = m_scene; | |||||
// 创建新的页面部件 | // 创建新的页面部件 | ||||
QWidget* newPage = new QWidget(tabWidget); | QWidget* newPage = new QWidget(tabWidget); | ||||
@@ -238,10 +243,8 @@ void HMIModule::addPage() | |||||
QGraphicsView* newGraphicsView = new QGraphicsView(newPage); | QGraphicsView* newGraphicsView = new QGraphicsView(newPage); | ||||
CustomGraphicsScene* newScene = new CustomGraphicsScene(newGraphicsView, this); | CustomGraphicsScene* newScene = new CustomGraphicsScene(newGraphicsView, this); | ||||
// 设置 GraphicsView 的大小,上下左右各扩大 10 像素 | |||||
QSize newViewSize = firstGraphicsView->size(); | |||||
newViewSize.setWidth(newViewSize.width() + 20); // 左右各增加 10 像素 | |||||
newViewSize.setHeight(newViewSize.height() + 20); // 上下各增加 10 像素 | |||||
// 设置 GraphicsView 的大小 | |||||
QSize newViewSize(691, 381); // 设置为指定的宽度和高度 | |||||
newGraphicsView->resize(newViewSize); | newGraphicsView->resize(newViewSize); | ||||
// 设置 GraphicsScene 的大小与 Page 1 相同 | // 设置 GraphicsScene 的大小与 Page 1 相同 | ||||
@@ -256,7 +259,6 @@ void HMIModule::addPage() | |||||
newPage->setLayout(layout); | newPage->setLayout(layout); | ||||
// 添加到 TabWidget | // 添加到 TabWidget | ||||
int tabIndex; | |||||
if (insertIndex != -1) { | if (insertIndex != -1) { | ||||
tabIndex = insertIndex; | tabIndex = insertIndex; | ||||
tabWidget->insertTab(tabIndex, newPage, pageName); | tabWidget->insertTab(tabIndex, newPage, pageName); | ||||
@@ -269,7 +271,6 @@ void HMIModule::addPage() | |||||
connect(newScene, &CustomGraphicsScene::copyRequestFromScene, this, &HMIModule::onCopyRequested); | connect(newScene, &CustomGraphicsScene::copyRequestFromScene, this, &HMIModule::onCopyRequested); | ||||
connect(newScene, &CustomGraphicsScene::pasteRequestFromScene, this, &HMIModule::onPasteRequested); | connect(newScene, &CustomGraphicsScene::pasteRequestFromScene, this, &HMIModule::onPasteRequested); | ||||
connect(newScene, &CustomGraphicsScene::deleteRequestFromScene, this, &HMIModule::onDeleteRequested); | connect(newScene, &CustomGraphicsScene::deleteRequestFromScene, this, &HMIModule::onDeleteRequested); | ||||
// ***************************************************************************** | |||||
// 发送 pageAdded 信号 | // 发送 pageAdded 信号 | ||||
emit pageAdded(pageNumber, tabIndex); | emit pageAdded(pageNumber, tabIndex); | ||||
@@ -19,7 +19,7 @@ public: | |||||
signals: | signals: | ||||
void pageAdded(int pageNumber, int index); | void pageAdded(int pageNumber, int index); | ||||
void pageRemoved(int pageNumber, int index); | void pageRemoved(int pageNumber, int index); | ||||
void logMessageGenerated(const QString& message); // 确保此行存在 | |||||
void logMessageGenerated(const QString& message); | |||||
private slots: | private slots: | ||||
void prepareToCreateButton(); | void prepareToCreateButton(); | ||||
@@ -29,14 +29,11 @@ private slots: | |||||
void onCopyRequested(); | void onCopyRequested(); | ||||
void onPasteRequested(const QPointF& scenePos); | void onPasteRequested(const QPointF& scenePos); | ||||
void onDeleteRequested(); | void onDeleteRequested(); | ||||
// 新增的槽函数 | |||||
void onChangeAppearanceRequested(HmiComponent* item); | |||||
void addPage(); | void addPage(); | ||||
void deletePage(); | void deletePage(); | ||||
void prePage(); | void prePage(); | ||||
void nextPage(); | void nextPage(); | ||||
// 新增的槽函数 | |||||
void onPageAdded(int pageNumber, int index); | void onPageAdded(int pageNumber, int index); | ||||
void onPageRemoved(int pageNumber, int index); | void onPageRemoved(int pageNumber, int index); | ||||
@@ -48,10 +45,10 @@ private: | |||||
CustomGraphicsScene* m_scene; | CustomGraphicsScene* m_scene; | ||||
ComponentType m_copiedType; | ComponentType m_copiedType; | ||||
QColor m_copiedColor; | QColor m_copiedColor; | ||||
bool m_hasCopiedItem = false; | |||||
int m_pageCount = 1; // 初始化页面计数器 | |||||
QList<int> m_availablePageNumbers; // 存储可用的页面编号 (有序列表) | |||||
QList<int> m_pageOrder; // 维护页面顺序 | |||||
bool m_hasCopiedItem = false; // 指示当前是否已经有组件被复制 | |||||
int m_pageCount = 1; // 初始化页面计数器 | |||||
QList<int> m_availablePageNumbers; // 存储可用的页面编号 (有序列表) | |||||
QList<int> m_pageOrder; // 维护页面顺序 | |||||
}; | }; | ||||
#endif // HMIMODULE_H | #endif // HMIMODULE_H |