综合平台编辑器
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.

95 lines
2.9 KiB

  1. #include "mainwindow.h"
  2. #include <QToolBar>
  3. #include <QToolButton>
  4. #include <QVBoxLayout>
  5. #include <QButtonGroup>
  6. #include <QFileDialog>
  7. #include <QMessageBox>
  8. #include <QCloseEvent>
  9. MainWindow::MainWindow(QWidget *parent)
  10. : QMainWindow(parent)
  11. , ui_(new Ui::MainWindow)
  12. {
  13. ui_->setupUi(this);
  14. hmi_ = new HMIModule(ui_, this);
  15. hmi_->init();
  16. initMainWindow();
  17. // 连接 HMIModule 的信号到 MainWindow 的槽
  18. connect(hmi_, &HMIModule::logMessageGenerated, this, &MainWindow::appendLog);
  19. // 新建菜单
  20. connect(ui_->action, &QAction::triggered, this, &MainWindow::onNewFile);
  21. connect(ui_->action_3, &QAction::triggered, this, [this]() {
  22. QString fileName = QFileDialog::getSaveFileName(this, "保存HMI文件", "", "JSON文件 (*.hmi)");
  23. if (!fileName.isEmpty()) {
  24. if (!hmi_->saveToFile(fileName)) {
  25. QMessageBox::warning(this, "保存失败", "文件保存失败!");
  26. }
  27. }
  28. });
  29. connect(ui_->action_2, &QAction::triggered, this, [this]() {
  30. QString fileName = QFileDialog::getOpenFileName(this, "打开HMI文件", "", "JSON文件 (*.hmi)");
  31. if (!fileName.isEmpty()) {
  32. if (!hmi_->openFromFile(fileName)) {
  33. QMessageBox::warning(this, "打开失败", "文件打开失败或格式不正确!");
  34. }
  35. }
  36. });
  37. }
  38. MainWindow::~MainWindow()
  39. {
  40. delete ui_;
  41. }
  42. void MainWindow::initMainWindow()
  43. {
  44. setWindowTitle("综合平台编辑器");
  45. setWindowIcon(QIcon(":/resource/image/editor.png"));
  46. // 运行默认打开HMI页面
  47. ui_->tabWidget->setCurrentIndex(1);
  48. }
  49. // 实现槽函数
  50. void MainWindow::appendLog(const QString& message)
  51. {
  52. ui_->textEdit->append(message);
  53. }
  54. // 新建菜单动作槽函数
  55. void MainWindow::onNewFile()
  56. {
  57. if (!hmi_)
  58. return;
  59. if (hmi_->isModified()) {
  60. auto ret = QMessageBox::warning(this, "提示",
  61. "当前文件有未保存的更改,是否保存?",
  62. QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel,
  63. QMessageBox::Save);
  64. if (ret == QMessageBox::Save) {
  65. QString fileName = QFileDialog::getSaveFileName(this, "保存HMI设计", "", "JSON文件 (*.json)");
  66. if (!fileName.isEmpty()) {
  67. if (!hmi_->saveToFile(fileName)) {
  68. QMessageBox::warning(this, "保存失败", "文件保存失败!");
  69. return; // 不新建,保存失败
  70. }
  71. } else {
  72. return; // 取消保存,取消新建
  73. }
  74. } else if (ret == QMessageBox::Cancel) {
  75. return; // 取消新建
  76. }
  77. // 如果是Discard,直接继续新建,丢弃当前修改
  78. }
  79. // 清空编辑区,新建页面
  80. hmi_->resetPages();
  81. }