在 Qt 项目中,如果你从 qmake(使用 .pro 文件)切换到 CMake,你需要相应地更新你的构建配置。对于包含 Qt Charts 模块的项目,以下是如何在 CMake 中配置它的指南。
基本步骤
-
安装 Qt Charts:确保 Qt Charts 模块已经安装在你的系统中。如果你使用的是 Qt 官方安装包,它通常是一个附加模块,你可能需要单独选择并安装它。
-
设置 CMakeLists.txt:创建或修改你的
CMakeLists.txt文件以包含 Qt Charts。
示例 CMakeLists.txt
以下是一个基本的 CMakeLists.txt 示例,它展示了如何包含 Qt Charts 模块:
在 Qt 项目中,如果你从 qmake(使用 .pro 文件)切换到 CMake,你需要相应地更新你的构建配置。对于包含 Qt Charts 模块的项目,以下是如何在 CMake 中配置它的指南。
基本步骤
安装 Qt Charts:确保 Qt Charts 模块已经安装在你的系统中。如果你使用的是 Qt 官方安装包,它通常是一个附加模块,你可能需要单独选择并安装它。
设置 CMakeLists.txt:创建或修改你的 CMakeLists.txt 文件以包含 Qt Charts。
示例 CMakeLists.txt
以下是一个基本的 CMakeLists.txt 示例,它展示了如何包含 Qt Charts 模块:
cmake
cmake_minimum_required(VERSION 3.14) # 或者是你需要的最低版本
project(MyQtChartApp)
# 查找 Qt 包
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Charts) # 对于 Qt5, 使用 Qt5 而不是 Qt6
# 设置你的源文件
set(SOURCES
main.cpp
mainwindow.cpp
# 添加其他源文件
)
# 设置你的头文件
set(HEADERS
mainwindow.h
# 添加其他头文件
)
# 设置你的 UI 文件(如果有)
set(UI_FILES
mainwindow.ui
# 添加其他 UI 文件
)
# 设置 Qt 资源文件(如果有)
set(RESOURCES
resources.qrc
# 添加其他资源文件
)
# 使用 Qt 的自动 MOC、UIC 和 RCC 处理
set_source_files_properties(${HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE)
qt_add_executable(MyQtChartApp
MANUAL_FINALIZATION
${SOURCES}
${HEADERS}
${UI_FILES}
${RESOURCES}
)
# 链接 Qt 库
target_link_libraries(MyQtChartApp PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Charts) # 对于 Qt5, 使用 Qt5:: 而不是 Qt6::
# 如果你有编译选项或定义,可以在这里添加
# target_compile_options(MyQtChartApp PRIVATE ...)
# target_compile_definitions(MyQtChartApp PRIVATE ...)
# 添加安装规则(可选)
# install(TARGETS MyQtChartApp DESTINATION bin)
注意事项
Qt 版本:确保在 find_package 和 target_link_libraries 中使用的是你实际安装的 Qt 版本。例如,如果你使用的是 Qt 5,你应该用 Qt5 替换 Qt6。
自动处理:使用 qt_add_executable(或 qt_add_library)而不是普通的 add_executable,以便 CMake 自动处理 Qt 的 MOC、UIC 和 RCC。
私有与公共依赖:在 target_link_libraries 中使用 PRIVATE 关键字意味着这些库仅在内部链接,不会暴露给依赖此目标的其他目标。根据你的需求,你也可以使用 PUBLIC 或 INTERFACE。
示例代码
以下是一个简单的示例,展示如何在主窗口中使用 Qt Charts:
main.cpp
cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtCharts/QChartView>
QT_CHARTS_USE_NAMESPACE
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QChart *chart;
};
#endif // MAINWINDOW_H
mainwindow.cpp
cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
chart(new QChart)
{
ui->setupUi(this);
QLineSeries *series = new QLineSeries();
series->append(0, 0);
series->append(1, 1);
series->append(2, 4);
series->append(3, 9);
series->append(4, 16);
chart->addSeries(series);
chart->createDefaultAxes();
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
setCentralWidget(chartView);
}
MainWindow::~MainWindow()
{
delete ui;
}
通过这些步骤,你应该能够在 CMake 环境中成功配置并使用 Qt Charts。
注意事项
-
Qt 版本:确保在
find_package和target_link_libraries中使用的是你实际安装的 Qt 版本。例如,如果你使用的是 Qt 5,你应该用Qt5替换Qt6。 -
自动处理:使用
qt_add_executable(或qt_add_library)而不是普通的add_executable,以便 CMake 自动处理 Qt 的 MOC、UIC 和 RCC。 -
私有与公共依赖:在
target_link_libraries中使用PRIVATE关键字意味着这些库仅在内部链接,不会暴露给依赖此目标的其他目标。根据你的需求,你也可以使用PUBLIC或INTERFACE。
示例代码
以下是一个简单的示例,展示如何在主窗口中使用 Qt Charts:
main.cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtCharts/QChartView>
QT_CHARTS_USE_NAMESPACE
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QChart *chart;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
chart(new QChart)
{
ui->setupUi(this);
QLineSeries *series = new QLineSeries();
series->append(0, 0);
series->append(1, 1);
series->append(2, 4);
series->append(3, 9);
series->append(4, 16);
chart->addSeries(series);
chart->createDefaultAxes();
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
setCentralWidget(chartView);
}
MainWindow::~MainWindow()
{
delete ui;
}
通过这些步骤,你应该能够在 CMake 环境中成功配置并使用 Qt Charts。
1977

被折叠的 条评论
为什么被折叠?



