From e1dd28762d83388315298eb8047c724180d79b72 Mon Sep 17 00:00:00 2001 From: dengjinlai <936887607@qq.com> Date: Fri, 30 Aug 2024 16:46:00 +0800 Subject: [PATCH] =?UTF-8?q?Qt=E5=AE=9E=E7=8E=B0=E5=AF=B9=E6=95=B0=E5=9D=90?= =?UTF-8?q?=E6=A0=87=E8=BD=B4=E7=9A=84=E5=9F=BA=E7=A1=80=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChartLogGeneration/CMakeLists.txt | 3 + .../ChartLogGeneration/CMakeLists.txt.user | 420 ------------------ .../ChartLogGeneration/mainwindow.cpp | 42 ++ .../ChartLogGeneration/mainwindow.h | 3 + .../ChartLogGeneration/settingsdialog.cpp | 112 +++++ .../ChartLogGeneration/settingsdialog.h | 45 ++ .../ChartLogGeneration/settingsdialog.ui | 68 +++ 7 files changed, 273 insertions(+), 420 deletions(-) delete mode 100644 DataVisualization/ChartLogGeneration/CMakeLists.txt.user create mode 100644 DataVisualization/ChartLogGeneration/settingsdialog.cpp create mode 100644 DataVisualization/ChartLogGeneration/settingsdialog.h create mode 100644 DataVisualization/ChartLogGeneration/settingsdialog.ui diff --git a/DataVisualization/ChartLogGeneration/CMakeLists.txt b/DataVisualization/ChartLogGeneration/CMakeLists.txt index 31d251b..3c80674 100644 --- a/DataVisualization/ChartLogGeneration/CMakeLists.txt +++ b/DataVisualization/ChartLogGeneration/CMakeLists.txt @@ -25,6 +25,9 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(ChartLogGeneration MANUAL_FINALIZATION ${PROJECT_SOURCES} + + settingsdialog.cpp settingsdialog.ui + settingsdialog.h ) # Define target properties for Android with Qt 6 as: # set_property(TARGET ChartLogGeneration APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR diff --git a/DataVisualization/ChartLogGeneration/CMakeLists.txt.user b/DataVisualization/ChartLogGeneration/CMakeLists.txt.user deleted file mode 100644 index a8c9b63..0000000 --- a/DataVisualization/ChartLogGeneration/CMakeLists.txt.user +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - EnvironmentId - {4cfc59db-e6ec-4ed6-8333-a9917c186f0e} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - 0 - false - true - false - 2 - true - true - 0 - 8 - true - false - 1 - true - true - true - *.md, *.MD, Makefile - false - true - true - - - - ProjectExplorer.Project.PluginSettings - - - true - false - true - true - true - true - - - 0 - true - - true - true - Builtin.DefaultTidyAndClazy - 2 - true - - - - true - - - - - ProjectExplorer.Project.Target.0 - - Desktop - Desktop Qt 6.7.1 - Desktop Qt 6.7.1 - qt.qt6.671.linux_gcc_64_kit - 0 - 0 - 0 - - Debug - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=Debug --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} - 0 - /home/dengjinlai/QtProjects/DataVisualization/ChartLogGeneration/build/Desktop_Qt_6_7_1-Debug - - - - - all - - false - - true - 构建 - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - 构建 - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Debug - CMakeProjectManager.CMakeBuildConfiguration - - - Release - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=Release --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} - /home/dengjinlai/QtProjects/DataVisualization/ChartLogGeneration/build/Desktop_Qt_6_7_1-Release - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} - /home/dengjinlai/QtProjects/DataVisualization/ChartLogGeneration/build/Desktop_Qt_6_7_1-RelWithDebInfo - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} - 0 - /home/dengjinlai/QtProjects/DataVisualization/ChartLogGeneration/build/Desktop_Qt_6_7_1-Profile - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Profile - CMakeProjectManager.CMakeBuildConfiguration - - - MinSizeRel - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=MinSizeRel --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} - /home/dengjinlai/QtProjects/DataVisualization/ChartLogGeneration/build/Desktop_Qt_6_7_1-MinSizeRel - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Minimum Size Release - CMakeProjectManager.CMakeBuildConfiguration - - 5 - - - 0 - 部署 - 部署 - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - ProjectExplorer.DefaultDeployConfiguration - - 1 - - true - true - 0 - true - - 2 - - false - -e cpu-cycles --call-graph dwarf,4096 -F 250 - ChartLogGeneration - CMakeProjectManager.CMakeRunConfiguration.ChartLogGeneration - ChartLogGeneration - false - true - true - true - /home/dengjinlai/QtProjects/DataVisualization/ChartLogGeneration/build/Desktop_Qt_6_7_1-Debug - - 1 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 22 - - - Version - 22 - - diff --git a/DataVisualization/ChartLogGeneration/mainwindow.cpp b/DataVisualization/ChartLogGeneration/mainwindow.cpp index bfabccc..2d3077c 100644 --- a/DataVisualization/ChartLogGeneration/mainwindow.cpp +++ b/DataVisualization/ChartLogGeneration/mainwindow.cpp @@ -4,6 +4,7 @@ #include #include + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) @@ -11,6 +12,7 @@ MainWindow::MainWindow(QWidget *parent) ui->setupUi(this); customPlot = new QCustomPlot(this); + settingsDialog = new SettingsDialog(this); QPushButton *saveButton = new QPushButton("Save Graph", this); connect(saveButton, &QPushButton::clicked, this, &MainWindow::saveGraph); @@ -21,6 +23,9 @@ MainWindow::MainWindow(QWidget *parent) ui->centralwidget->setLayout(layout); plotGraph(); + + // 连接customPlot的双击信号到槽函数 + connect(customPlot, &QCustomPlot::mouseDoubleClick, this, &MainWindow::openSettingsDialog); } MainWindow::~MainWindow() @@ -28,6 +33,8 @@ MainWindow::~MainWindow() delete ui; } + + void MainWindow::plotGraph() { QVector I_values, t_values; @@ -109,3 +116,38 @@ void MainWindow::saveGraph() customPlot->savePng(filePath); } } + +void MainWindow::openSettingsDialog() +{ + if (settingsDialog->exec() == QDialog::Accepted) { + // 从settingsDialog获取设置并应用到customPlot + + // 获取轴范围 + double xMin = settingsDialog->getXMin(); + double xMax = settingsDialog->getXMax(); + double yMin = settingsDialog->getYMin(); + double yMax = settingsDialog->getYMax(); + + customPlot->xAxis->setRange(xMin, xMax); + customPlot->yAxis->setRange(yMin, yMax); + + // 设置曲线颜色 + QColor curveColor1 = settingsDialog->getCurveColor(0); + QColor curveColor2 = settingsDialog->getCurveColor(1); + + // customPlot->graph(0)->setPen(QPen(curveColor1)); + // customPlot->graph(1)->setPen(QPen(curveColor2)); + + // 设置背景颜色 + QColor backgroundColor = settingsDialog->getBackgroundColor(); + customPlot->setBackground(backgroundColor); + + // 设置网格可见性 + bool gridVisible = settingsDialog->isGridVisible(); + customPlot->xAxis->grid()->setVisible(gridVisible); + customPlot->yAxis->grid()->setVisible(gridVisible); + + // 重新绘制图表 + customPlot->replot(); + } +} diff --git a/DataVisualization/ChartLogGeneration/mainwindow.h b/DataVisualization/ChartLogGeneration/mainwindow.h index 801df52..7a6fd88 100644 --- a/DataVisualization/ChartLogGeneration/mainwindow.h +++ b/DataVisualization/ChartLogGeneration/mainwindow.h @@ -3,6 +3,7 @@ #include #include "qcustomplot.h" +#include "settingsdialog.h" // 引入设置对话框头文件 QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } @@ -18,10 +19,12 @@ public: private slots: void saveGraph(); + void openSettingsDialog(); // 新增槽函数 private: Ui::MainWindow *ui; QCustomPlot *customPlot; + SettingsDialog *settingsDialog; void plotGraph(); }; diff --git a/DataVisualization/ChartLogGeneration/settingsdialog.cpp b/DataVisualization/ChartLogGeneration/settingsdialog.cpp new file mode 100644 index 0000000..e60d1d7 --- /dev/null +++ b/DataVisualization/ChartLogGeneration/settingsdialog.cpp @@ -0,0 +1,112 @@ +#include "settingsdialog.h" + +SettingsDialog::SettingsDialog(QWidget *parent) : + QDialog(parent) +{ + // 创建UI元素 + QLabel *xMinLabel = new QLabel("X Axis Min:", this); + xMinLineEdit = new QLineEdit(this); + QLabel *xMaxLabel = new QLabel("X Axis Max:", this); + xMaxLineEdit = new QLineEdit(this); + QLabel *yMinLabel = new QLabel("Y Axis Min:", this); + yMinLineEdit = new QLineEdit(this); + QLabel *yMaxLabel = new QLabel("Y Axis Max:", this); + yMaxLineEdit = new QLineEdit(this); + + QLabel *curveColor1Label = new QLabel("Curve 1 Color:", this); + curveColor1Button = new QPushButton(this); + curveColor1Button->setStyleSheet("background-color: blue"); + + QLabel *curveColor2Label = new QLabel("Curve 2 Color:", this); + curveColor2Button = new QPushButton(this); + curveColor2Button->setStyleSheet("background-color: green"); + + QLabel *backgroundColorLabel = new QLabel("Background Color:", this); + backgroundColorButton = new QPushButton(this); + backgroundColorButton->setStyleSheet("background-color: white"); + + gridCheckBox = new QCheckBox("Show Grid", this); + gridCheckBox->setChecked(true); + + // 设置布局 + QGridLayout *layout = new QGridLayout(this); + layout->addWidget(xMinLabel, 0, 0); + layout->addWidget(xMinLineEdit, 0, 1); + layout->addWidget(xMaxLabel, 1, 0); + layout->addWidget(xMaxLineEdit, 1, 1); + layout->addWidget(yMinLabel, 2, 0); + layout->addWidget(yMinLineEdit, 2, 1); + layout->addWidget(yMaxLabel, 3, 0); + layout->addWidget(yMaxLineEdit, 3, 1); + + layout->addWidget(curveColor1Label, 4, 0); + layout->addWidget(curveColor1Button, 4, 1); + layout->addWidget(curveColor2Label, 5, 0); + layout->addWidget(curveColor2Button, 5, 1); + layout->addWidget(backgroundColorLabel, 6, 0); + layout->addWidget(backgroundColorButton, 6, 1); + + layout->addWidget(gridCheckBox, 7, 0, 1, 2); + + // 确认和取消按钮 + QPushButton *okButton = new QPushButton("OK", this); + QPushButton *cancelButton = new QPushButton("Cancel", this); + + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addWidget(okButton); + buttonLayout->addWidget(cancelButton); + + // 将按钮布局添加到主布局 + layout->addLayout(buttonLayout, 8, 0, 1, 2); + + // 设置对话框的主要布局 + setLayout(layout); + + // 连接按钮信号到槽 + connect(curveColor1Button, &QPushButton::clicked, this, [=](){ + QColor color = QColorDialog::getColor(Qt::blue, this); + if (color.isValid()) { + curveColor1Button->setStyleSheet(QString("background-color: %1").arg(color.name())); + } + }); + + connect(curveColor2Button, &QPushButton::clicked, this, [=](){ + QColor color = QColorDialog::getColor(Qt::green, this); + if (color.isValid()) { + curveColor2Button->setStyleSheet(QString("background-color: %1").arg(color.name())); + } + }); + + connect(backgroundColorButton, &QPushButton::clicked, this, [=](){ + QColor color = QColorDialog::getColor(Qt::white, this); + if (color.isValid()) { + backgroundColorButton->setStyleSheet(QString("background-color: %1").arg(color.name())); + } + }); + + connect(okButton, &QPushButton::clicked, this, &QDialog::accept); + connect(cancelButton, &QPushButton::clicked, this, &QDialog::reject); +} + +SettingsDialog::~SettingsDialog() = default; + +double SettingsDialog::getXMin() const { return xMinLineEdit->text().toDouble(); } +double SettingsDialog::getXMax() const { return xMaxLineEdit->text().toDouble(); } +double SettingsDialog::getYMin() const { return yMinLineEdit->text().toDouble(); } +double SettingsDialog::getYMax() const { return yMaxLineEdit->text().toDouble(); } + +QColor SettingsDialog::getCurveColor(int index) const { + switch (index) { + case 0: return QColor(curveColor1Button->styleSheet().mid(17, 7)); + case 1: return QColor(curveColor2Button->styleSheet().mid(17, 7)); + default: return QColor(Qt::black); + } +} + +QColor SettingsDialog::getBackgroundColor() const { + return QColor(backgroundColorButton->styleSheet().mid(17, 7)); +} + +bool SettingsDialog::isGridVisible() const { + return gridCheckBox->isChecked(); +} diff --git a/DataVisualization/ChartLogGeneration/settingsdialog.h b/DataVisualization/ChartLogGeneration/settingsdialog.h new file mode 100644 index 0000000..b3ea3bb --- /dev/null +++ b/DataVisualization/ChartLogGeneration/settingsdialog.h @@ -0,0 +1,45 @@ +#ifndef SETTINGSDIALOG__H +#define SETTINGSDIALOG__H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SettingsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SettingsDialog(QWidget *parent = nullptr); + ~SettingsDialog(); + + double getXMin() const; + double getXMax() const; + double getYMin() const; + double getYMax() const; + + QColor getCurveColor(int index) const; + QColor getBackgroundColor() const; + + bool isGridVisible() const; + +private: + QLineEdit *xMinLineEdit; + QLineEdit *xMaxLineEdit; + QLineEdit *yMinLineEdit; + QLineEdit *yMaxLineEdit; + + QPushButton *curveColor1Button; + QPushButton *curveColor2Button; + QPushButton *backgroundColorButton; + + QCheckBox *gridCheckBox; +}; + +#endif // SETTINGSDIALOG__H diff --git a/DataVisualization/ChartLogGeneration/settingsdialog.ui b/DataVisualization/ChartLogGeneration/settingsdialog.ui new file mode 100644 index 0000000..c48526b --- /dev/null +++ b/DataVisualization/ChartLogGeneration/settingsdialog.ui @@ -0,0 +1,68 @@ + + + settingsdialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + buttonBox + accepted() + settingsdialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + settingsdialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +