|
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include"hmiwidget.h"
-
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- ,canDrawCircle(false)
- ,canDrawRectangle(false)
- {
- ui->setupUi(this);
- scene = new QGraphicsScene(this);
- ui->graphicsView_2->setScene(scene);
-
- connect(ui->treeWidget_2, &QTreeWidget::itemClicked, this, &MainWindow::onHmiItemClicked);
- ui-> graphicsView_2->viewport()->installEventFilter(this);
-
- addDockWidget(Qt::BottomDockWidgetArea, ui->dockWidget_3);//将dockWidget_3添加到主窗口的下方
- ui->treeWidget_2->topLevelItem(0)->setIcon(0, QIcon("C:/Users/admin/Desktop/灯泡.png"));
- ui->treeWidget_2->topLevelItem(1)->setIcon(0, QIcon("C:/Users/admin/Desktop/按钮.png"));
- }
-
- MainWindow::~MainWindow()
- {
- delete ui;
- }
-
- void MainWindow::onHmiItemClicked(QTreeWidgetItem *item)
- {
- if (item->text(0) == "指示灯")
- {
- canDrawCircle = true;
- canDrawRectangle = false;
- }
- else if(item->text(0) == "按钮")
- {
- canDrawCircle=false;
- canDrawRectangle = true;//如果点击的是按钮,则不允许绘制灯
- }
- else {
- canDrawRectangle = false;//如果点击的是灯,则不允许绘制按钮
- canDrawCircle = false;
- }
- }
- bool MainWindow::eventFilter(QObject *obj, QEvent *event)
- {
- // 修正1:使用一致的视图对象名(graphicsView_2)
- if (obj != ui->graphicsView_2->viewport()) {
- return false; // 不是我们关心的对象,不处理
- }
- // 只处理鼠标按下事件
- if (event->type() == QEvent::MouseButtonPress) {
- QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
- if (mouseEvent->button() == Qt::LeftButton) {
- // 获取点击的场景坐标
- QPointF scenePos = ui->graphicsView_2->mapToScene(mouseEvent->pos());
-
- // 根据标志绘制元素
- if (canDrawCircle) {
- ResizableEllipse *circle = new ResizableEllipse(
- scenePos.x(), scenePos.y(), 50, 50);
- circle->setBrush(QBrush(Qt::red)); // 设置指示灯颜色
- scene->addItem(circle);
- }
- else if (canDrawRectangle) {
- ResizableRectangle *rectangle = new ResizableRectangle(
- scenePos.x(), scenePos.y(), 100, 50);
- rectangle->setBrush(QBrush(Qt::yellow)); // 设置按钮颜色
- scene->addItem(rectangle);
- }
-
- // 重置绘制标志
- canDrawCircle = false;
- canDrawRectangle = false;
-
- // 修正2:使用一致的树控件对象名(treeWidget_2)
- if (ui->treeWidget_2->currentItem()) {
- ui->treeWidget_2->currentItem()->setSelected(false);
- }
-
- return true; // 事件已处理
- }
- }
- // 修正3:正确处理未过滤的事件
- return QMainWindow::eventFilter(obj, event);
- }
|