Browse Source

能够设置按钮或指示灯的颜色

master
付春阳 1 day ago
parent
commit
0192d9991e
5 changed files with 36 additions and 29 deletions
  1. +9
    -1
      customgraphics.cpp
  2. +4
    -0
      customgraphics.h
  3. +0
    -3
      customgraphicsscene.h
  4. +17
    -16
      hmimodule.cpp
  5. +6
    -9
      hmimodule.h

+ 9
- 1
customgraphics.cpp View File

@@ -3,6 +3,7 @@
#include <QGraphicsSceneMouseEvent>
#include <QMenu>
#include <QGraphicsScene>
#include <QColorDialog>

// HmiComponent 基类实现
HmiComponent::HmiComponent(QGraphicsItem *parent) : QGraphicsObject(parent)
@@ -65,19 +66,26 @@ void HmiComponent::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
QMenu menu;
QAction *copyAction = menu.addAction("复制");
QAction *deleteAction = menu.addAction("删除");
QAction *appearanceAction = menu.addAction("改变外观");

// 使用 connect 将菜单动作的触发连接到信号的发射,“复制”和“删除”
// 使用 connect 将菜单动作的触发连接到信号的发射,复制和删除
connect(copyAction, &QAction::triggered, this, [this]() {
emit copyRequested(this);
});
connect(deleteAction, &QAction::triggered, this, [this]() {
emit deleteRequested(this);
});
connect(appearanceAction, &QAction::triggered, this, &HmiComponent::changeAppearance);

// 在鼠标光标位置显示菜单
menu.exec(event->screenPos());
}

void HmiComponent::changeAppearance()
{
emit appearanceChangedRequested(this);
}

HmiButton::HmiButton(QGraphicsItem *parent) : HmiComponent(parent)
{
m_color = Qt::gray;


+ 4
- 0
customgraphics.h View File

@@ -24,6 +24,7 @@ signals:
// 为复制和删除请求添加信号
void copyRequested(HmiComponent* item);
void deleteRequested(HmiComponent* item);
void appearanceChangedRequested(HmiComponent* item);

public:
explicit HmiComponent(QGraphicsItem *parent = nullptr);
@@ -35,6 +36,9 @@ public:

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;

public slots:
void changeAppearance();

protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
// 重写上下文菜单事件


+ 0
- 3
customgraphicsscene.h View File

@@ -30,10 +30,7 @@ signals:

protected:
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) override;

// 在这里添加下面这行代码
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) override;

void keyPressEvent(QKeyEvent *keyEvent) override;
void contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent) override;



+ 17
- 16
hmimodule.cpp View File

@@ -6,6 +6,7 @@
#include <QMessageBox>
#include <QVBoxLayout>
#include <algorithm>
#include <QColorDialog>

HMIModule::HMIModule(Ui::MainWindow* ui, QObject *parent)
: 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::copyRequested, this, &HMIModule::onCopyRequested);
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 log = QString("[%1] 创建 %2 组件")
.arg(currentTime)
.arg(item->componentName());
QString log = QString("[%1] 创建 %2 组件").arg(currentTime).arg(item->componentName());
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)
{
@@ -195,11 +203,9 @@ void HMIModule::onPageRemoved(int pageNumber, int index)
}
}

// 确保提供 HMIModule::onComponentSelected 的定义
void HMIModule::onComponentSelected(HmiComponent* item)
{
// 在这里添加你的代码
// 如果不需要任何操作,可以留空
// 不需要任何操作,可以留空
}

// 新增页面的槽函数
@@ -208,6 +214,7 @@ void HMIModule::addPage()
QTabWidget* tabWidget = ui_->tabWidget_2;
int pageNumber;
int insertIndex = -1;
int tabIndex; // 在此处声明 tabIndex

// 检查是否有可用的页面编号
if (!m_availablePageNumbers.isEmpty()) {
@@ -224,10 +231,8 @@ void HMIModule::addPage()
} else {
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);
@@ -238,10 +243,8 @@ void HMIModule::addPage()
QGraphicsView* newGraphicsView = new QGraphicsView(newPage);
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);

// 设置 GraphicsScene 的大小与 Page 1 相同
@@ -256,7 +259,6 @@ void HMIModule::addPage()
newPage->setLayout(layout);

// 添加到 TabWidget
int tabIndex;
if (insertIndex != -1) {
tabIndex = insertIndex;
tabWidget->insertTab(tabIndex, newPage, pageName);
@@ -269,7 +271,6 @@ void HMIModule::addPage()
connect(newScene, &CustomGraphicsScene::copyRequestFromScene, this, &HMIModule::onCopyRequested);
connect(newScene, &CustomGraphicsScene::pasteRequestFromScene, this, &HMIModule::onPasteRequested);
connect(newScene, &CustomGraphicsScene::deleteRequestFromScene, this, &HMIModule::onDeleteRequested);
// *****************************************************************************

// 发送 pageAdded 信号
emit pageAdded(pageNumber, tabIndex);


+ 6
- 9
hmimodule.h View File

@@ -19,7 +19,7 @@ public:
signals:
void pageAdded(int pageNumber, int index);
void pageRemoved(int pageNumber, int index);
void logMessageGenerated(const QString& message); // 确保此行存在
void logMessageGenerated(const QString& message);

private slots:
void prepareToCreateButton();
@@ -29,14 +29,11 @@ private slots:
void onCopyRequested();
void onPasteRequested(const QPointF& scenePos);
void onDeleteRequested();

// 新增的槽函数
void onChangeAppearanceRequested(HmiComponent* item);
void addPage();
void deletePage();
void prePage();
void nextPage();

// 新增的槽函数
void onPageAdded(int pageNumber, int index);
void onPageRemoved(int pageNumber, int index);

@@ -48,10 +45,10 @@ private:
CustomGraphicsScene* m_scene;
ComponentType m_copiedType;
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

Loading…
Cancel
Save