QT += charts 换到cmake环境如何

在 Qt 项目中,如果你从 qmake(使用 .pro 文件)切换到 CMake,你需要相应地更新你的构建配置。对于包含 Qt Charts 模块的项目,以下是如何在 CMake 中配置它的指南。

基本步骤

  1. 安装 Qt Charts:确保 Qt Charts 模块已经安装在你的系统中。如果你使用的是 Qt 官方安装包,它通常是一个附加模块,你可能需要单独选择并安装它。

  2. 设置 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。

注意事项

  1. Qt 版本:确保在 find_package 和 target_link_libraries 中使用的是你实际安装的 Qt 版本。例如,如果你使用的是 Qt 5,你应该用 Qt5 替换 Qt6

  2. 自动处理:使用 qt_add_executable(或 qt_add_library)而不是普通的 add_executable,以便 CMake 自动处理 Qt 的 MOC、UIC 和 RCC。

  3. 私有与公共依赖:在 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。

QT += quick widgets quickwidgets #charts #virtualkeyboard TEMPLATE = app CONFIG += release CONFIG += qml TARGET = xcamera_gui INCLUDEPATH += . CONFIG += c++11 QMAKE_CXXFLAGS += -std=c++11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Refer to the documentation for the # deprecated API to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 INCLUDEPATH += Zmq SOURCES += \ Zmq/CR_ReadConfig.cpp \ Zmq/SDKImageProcessing.cpp \ Zmq/ZmqSocket.cpp \ Zmq/fastguidedfilter.cpp \ Zmq/imagesocket.cpp \ appconfig.cpp \ confighandle.cpp \ commonfunction.cpp \ demo.cpp \ imageprovider.cpp \ informationhandle.cpp \ jpegimage.cpp \ jsonconfig.cpp \ main.cpp \ messagehandle.cpp \ patienthandle.cpp \ radimage.cpp \ tracehandle.cpp \ type.cpp RESOURCES += qml.qrc # Additional import path used to resolve QML modules just for Qt Quick Designer # Default rules for deployment. #qnx: target.path = /tmp/$${TARGET}/bin #else: unix:!android: target.path = /opt/$${TARGET}/bin #!isEmpty(target.path): INSTALLS += target HEADERS += \ Zmq/CR_ReadConfig.h \ Zmq/SDKImageProcessing.h \ Zmq/ZmqSocket.h \ Zmq/fastguidedfilter.h \ Zmq/imagesocket.h \ appconfig.h \ confighandle.h \ commonfunction.h \ demo.h \ errorcode.h \ imageprovider.h \ informationhandle.h \ jpegimage.h \ jsonconfig.h \ messagehandle.h \ patienthandle.h \ radimage.h \ tracehandle.h \ type.h INCLUDEPATH += /export/include \ /usr/include/opencv4 \ /export/dcmtk3.6.6/usr/local/include LIBS += -L/export/lib -lzmq \ -L/usr/lib/aarch64-linux-gnu/opencv_4.1.1 -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -lopencv_highgui \ -L/export/dcmtk3.6.6/usr/local/lib -ldcmdata -ldcmimgle -ldcmjpeg -lofstd 参考上述qt的pro文件,将构建器从qmake迁移至cmakecmake的架构和CMakeLists应该如何实现
07-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值