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
+
+
+
+
+