You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.5 KiB

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent)
  4. : QMainWindow(parent)
  5. , ui(new Ui::MainWindow)
  6. ,canDrawCircle(false)
  7. ,canDrawRectangle(false)
  8. {
  9. ui->setupUi(this);
  10. scene = new QGraphicsScene(this);
  11. ui->graphicsView_2->setScene(scene);
  12. connect(ui->treeWidget_2, &QTreeWidget::itemClicked, this, &MainWindow::onHmiItemClicked);
  13. ui-> graphicsView_2->viewport()->installEventFilter(this);
  14. addDockWidget(Qt::BottomDockWidgetArea, ui->dockWidget_3);//将dockWidget_3添加到主窗口的下方
  15. QList<QTreeWidgetItem *> items = ui->treeWidget_2->findItems("指示灯", Qt::MatchExactly);
  16. for (QTreeWidgetItem *item : items) {
  17. item->setIcon(0, QIcon("C:/Users/admin/Desktop/T-常开触点-01.png"));
  18. }
  19. }
  20. MainWindow::~MainWindow()
  21. {
  22. delete ui;
  23. }
  24. void MainWindow::onHmiItemClicked(QTreeWidgetItem *item){
  25. if (item->text(0) == "指示灯")
  26. {
  27. canDrawCircle = true;
  28. canDrawRectangle = false;
  29. }
  30. else if(item->text(0) == "按钮")
  31. {
  32. canDrawCircle=false;
  33. canDrawRectangle = true;//如果点击的是按钮,则不允许绘制灯
  34. }
  35. else {
  36. canDrawRectangle = false;//如果点击的是灯,则不允许绘制按钮
  37. canDrawCircle = false;
  38. }
  39. }
  40. bool MainWindow::eventFilter(QObject *obj, QEvent *event)
  41. {
  42. if (obj == ui->graphicsView_2->viewport() && event->type() == QEvent::MouseButtonPress) {
  43. QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
  44. if (mouseEvent->button() == Qt::LeftButton) {
  45. // 获取点击的场景坐标
  46. if (canDrawCircle)
  47. {
  48. QPointF scenePos = ui->graphicsView_2->mapToScene(mouseEvent->pos());// 在点击位置绘制一个指示灯
  49. scene->addEllipse(scenePos.x(), scenePos.y(), 50, 50, QPen(Qt::black), QBrush(Qt::blue));
  50. }
  51. else if (canDrawRectangle)
  52. {
  53. QPointF scenePos = ui->graphicsView_2->mapToScene(mouseEvent->pos());//在点击位置绘制一个按钮
  54. scene->addRect(scenePos.x(), scenePos.y(), 50, 50, QPen(Qt::black), QBrush(Qt::blue));
  55. }
  56. QTreeWidgetItem *selectedItem = ui->treeWidget_2->currentItem();
  57. if (selectedItem)
  58. {
  59. selectedItem->setSelected(false);//取消选中当前项目
  60. }
  61. canDrawCircle = false;
  62. canDrawRectangle = false;
  63. return true;
  64. }
  65. return QMainWindow::eventFilter(obj, event);
  66. }
  67. }