KDChart3.0编译过程-使用QT5.15及QT6.x编译

news2024/11/17 3:35:27

文章目录

  • 参考原文
    • 一、下载KDChart源文件
    • 二、下载安装CMake
    • 三、编译
      • Qt5.15.0 编译
      • Qt6.x 编译
        • 使用Qt6.X编译的直接看这最快
    • 四、使用
      • 测试方法一:
      • 测试方法二:

参考原文

记录我的KDChart3.0编译过程
系统:win11,Qt5.15 ,编译器mingw 64位


版权声明:本文为博主原创文章,遵循 CC 4.0
BY-SA
版权协议,转载请附上原文出处链接和本声明。


注意,KDChart3.0要求QT5.15及以上版本

  • 本文使用Qt6.4.3编译,使用QT5.15建议阅读记录我的KDChart3.0编译过程
  • 如果无法阅读,本文也有QT5.15编译。

一、下载KDChart源文件

打开官网https://www.kdab.com/development-resources/qt-tools/kd-chart/

拉到最下面,

image-20231023225936339
  • 下载源文件,然后解压。

  • 查看文件夹里的INSTALL.txt,可以看到需要CMake编译。
image-20231023230311958

中文版

这些是使用CMake构建系统安装KD Chart的说明。
需要使用CMake版本3.3或更高版本。

Qt版本支持:

KD Chart 2.5.0或以下版本需要Qt4
KD Chart 2.5.1到2.7.2需要Qt4到Qt5.15
KD Chart 2.8.x删除了Qt4支持(即仅限Qt5)
KD Chart 3.0或更高版本需要Qt5.15.0到Qt6.x (如果需要支持旧版Qt5,请发送邮件至info@kdab.com)
请注意,Qt6构建需要符合C++17标准的编译器,而Qt5构建可以通过C++11标准。

请参阅CMakeLists.txt顶部的注释,以获取可传递给cmake的可用配置选项。

Windows上的安装目录默认为c:\ KDAB \ KDChart-<version>,
非Windows平台默认为/usr/local/KDAB/KDChart-<version>。
您可以通过传递选项 -DCMAKE_INSTALL_PREFIX=/install/path 给cmake来更改此位置。

1)从您的KD Chart安装的顶级目录创建一个构建目录:

mkdir build

并切换到该构建目录:

cd build

2)现在根据所需的构建类型运行'cmake'之一:
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake -DKDChart_STATIC=True -DCMAKE_BUILD_TYPE=Debug ..
cmake -DKDChart_STATIC=True -DCMAKE_BUILD_TYPE=Release ..

要定义用于安装位置,请使用以下命令:
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=C:/kdchart ..
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/opt/kdchart ..

3)Unix
将LD_LIBRARY_PATH设置为指向KD Chart安装的lib目录。 如果您尚未设置LD_LIBRARY_PATH,则在终端中运行:
% LD_LIBRARY_PATH=/path/to/kdchart/lib:$LD_LIBRARY_PATH
% export LD_LIBRARY_PATH

上述内容必须添加到您的.bashrc或类似文件中以保持。当然也可以在构建使用KD Reports的软件之前从shell中运行,
但在这种情况下,您的设置仅在此shell中可用。

4)MacOS
按照上述描述进行操作,但使用DYLD_LIBRARY_PATH而不是LD_LIBRARY_PATH

5)Windows
对于运行可执行文件,请将KD Chart dll (kdchart\bin)路径添加到PATH中。例如:set PATH=\path\to\kdchart\bin;%PATH%
对于开发,请将KD Chart lib (kdchart\lib)路径添加到LIB环境变量中。例如:set LIB=\path\to\kdchart\lib;%LIB%

6)通过键入以下内容构建所有内容:

从您的顶级KD Chart目录运行:

% make    # Unix, Mac
% nmake   # Windows

7)(可选:)安装KD Chart:

从您的顶级KD Reports目录运行:

% make install   # Unix, Mac
% nmake install  # Windows

这将把必需的文件复制到安装路径的子目录中:
对于Unix / Linux,Mac:/usr/local/KDAB/KDChart-VERSION /
对于Windows,这是:C:\ KDAB \ KDChart-VERSION \

8)查看示例应用程序,它们将帮助您入门KD Chart。

==测试==
要构建测试工具包,请向CMake传递-DKDChart_TESTS=true,如下所示:
% cmake -DKDChart_TESTS=true

然后运行'make test'来运行单元测试。

==使用==
从您的CMake项目中添加

find_package(KDChart CONFIG REQUIRED)

或Qt6的情况下

find_package(KDChart-qt6 CONFIG REQUIRED)

并链接到导入的目标KDChart :: kdchart。
这就是您需要做的全部(导入的目标还带有包含目录)。

根据您安装KDChart的位置,您可能还需要指定CMAKE_PREFIX_PATH环境变量。

二、下载安装CMake

注意:

如果使用Qt6.x 编译,可以不用安装,Qt6自带CMake,还不用配置!(直接看 三、编译 -> Qt6.x 编译

CMake下载https://cmake.org/download/

image-20231023232107794

我根据自己的系统选了安装版。

安装时基本都默认设置。可以把桌面图标勾上。

三、编译

我们先创建两个文件夹,用来放cmake编译文件。

我把文件夹放在kdchart源文件下面了。

image-20231023232622610

接着打开刚安装的cmake。

在这里插入图片描述

填写源文件目录和build文件夹目录。

image-20231023233549034

点击Configure

选择编译器,并指定本地目录。

image-20231023233854222

要选择Qt安装目录下的编译器地址。

image-20231023234614407

点击Finish,提示找不到文件。

image-20231023234835956

Qt5.15.0 编译

消息框提示,这两个文件找不到。这个文件是在安装目录下的这个位置。注意地址里的编译器版本。

把地址填到CMake软件中的Qt5_DIR这项,

image-20231023235832084

然后再点Configure。依然报错,这次少了Qt5sql。

填入地址,

再点Configure。这次窗口不红了,不报错了。

Qt6.x 编译

image-20231024001904430
  • 没有找到 Qt6Config.cmake qt6-config.cmake,填写Qt6_DIR,再点Configure
image-20231024002309753
  • 没有找到 Qt6CoreToolsConfig.cmake qt6coretools-config.cmake;填写Qt6GuiTools_DIR,再点Configure
image-20231024002657653

CMake:允许设置 Qt6_DIR 在不交叉编译时查找包

image-20231024004247925

解决办法:

1.设置Qt6_close不足以查找Qt包

2.c++ CMake在Qt6安装中找不到软件包

还有一篇文章使用方法是:

设置

QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH

QT_ADDITIONAL_PACKAGES_PREFIX_PATH

image-20231024014211452

但是我没有成功

使用Qt6.X编译的直接看这最快
  • 直接使用QT6自带的cmake-gui(QT\6.x\Tools\CMake_64\bin\cmake-gui)

    image-20231024214855128

先点击Configure,不报错,点击Generate。

image-20231024014731703

选择需要的build版本(debug或release)。我这次选择release的(debug版本已经编译过了)。

往下翻,这是install文件夹,可以更改为喜欢的位置,但请记住它。

改好后,点击Generate。

成功了。

管理员身份打开CMD窗口,cd到刚才的build文件夹。

image-20231024215425486 image-20231024215647943

切换到非C盘,如F盘

C:\> F:
F:\> cd xxx

输入命令 mingw32-make.exe

这里一定是mingw32,不要因为是64位编译器就填64了。

按回车。编译蛮久的,等一会儿。

完成以后,再输入mingw32-make.exe install

image-20231024014915908

在这里插入图片描述

完成后,来到install文件夹。

在这里插入图片描述

这样就编译好了。

主要是要用到这些文件。

Qt5.15.0 编译得到

“C:\Program Files (x86)\KDChart\bin\libkdchart3.dll”

“C:\Program Files (x86)\KDChart\lib\libkdchart3.dll.a”

“C:\Program Files (x86)\KDChart\include\KDChart”

Qt6.x 编译得到

“C:/Program Files (x86)/KDChart/lib/libkdchart-qt63.dll.a”
“C:/Program Files (x86)/KDChart/bin/libkdchart-qt63.dll”

“C:/Program Files (x86)/KDChart/include/KDChart”

四、使用

把编译好的头文件,库文件保存到工程目录下。

debug的库文件是(libkdchart3d.dll、libkdchart3d.dll.a)/(我没编debug)

release的库文件是(libkdchart3.dll、libkdchart3.dll.a)/(libkdchart-qt63.dll、libkdchart-qt63.dll.a)

我们新建一个Qt项目,运行一下。

测试方法一:

把对应版本的文件放到工程目录下。

然后再.pro文件中添加这些头文件和库。

抄一段官方文档给的例子。https://docs.kdab.com/kdchart/latest/

#include "mainwindow.h"
#include <QApplication>
#include <KDChartWidget>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);		// 创建应用程序对象

    MainWindow w;// 创建主窗口对象
    w.show();    // 显示主窗口

    KDChart::Widget widget;    // 创建KDChart部件对象
    widget.resize( 600, 600 );    // 设置部件大小

    QVector< qreal > vec0, vec1, vec2;    // 创建三个数据集的容器
    vec0 << -5 << -4 << -3 << -2 << -1 << 0 << 1 << 2 << 3 << 4 << 5;    // 向vec0添加数据点
    vec1 << 25 << 16 << 9 << 4 << 1 << 0 << 1 << 4 << 9 << 16 << 25;    // 向vec1添加数据点
    vec2 << -125 << -64 << -27 << -8 << -1 << 0 << 1 << 8 << 27 << 64 << 125;    // 向vec2添加数据点

    widget.setDataset( 0, vec0, "Linear" );    // 将vec0与标签"Linear"关联,并添加到部件中
    widget.setDataset( 1, vec1, "Quadratic" );    // 将vec1与标签"Quadratic"关联,并添加到部件中
    widget.setDataset( 2, vec2, "Cubic" );    // 将vec2与标签"Cubic"关联,并添加到部件中

    widget.show();    // 显示曲线图部件

    return a.exec();    // 启动应用程序的事件循环
}

运行。

测试方法二:

  • 使用Qt Creator打开下载的KDChart源码的官方例子KDChart-kdchart-3.0\tests\Gantt\apireview

    image-20231024232748587

在Qt Creator打开CMakeLists.txt,补充如下:

##
# This file is part of the KD Chart library.
#
# SPDX-FileCopyrightText: 2019-2023 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
#
# SPDX-License-Identifier: MIT
#
# 指定所需的最低CMake版本为3.5
cmake_minimum_required(VERSION 3.5)

#定义项目名称为18qt6-cmake,指定项目版本为0.1,使用的编程语言为C++project(Ganttapireview-manual-test VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)   #启用自动UI编译
set(CMAKE_AUTOMOC ON)   #启用自动MOC(Meta-Object Compiler)
set(CMAKE_AUTORCC ON)   #启用自动RCC(Resource Compiler)

set(CMAKE_CXX_STANDARD 11) #设置C++标准为C++11

#要求使用指定的C++标准
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 指定要链接的动态库的路径
link_directories("C:/Program Files (x86)/KDChart/lib/")


#查找Qt库,并指定需要的组件为Widgets。它会根据可用的Qt版本自动查找并设置Qt变量
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets PrintSupport)

#根据主要Qt版本号查找并设置所需的Qt Widgets组件
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets PrintSupport)

#定义项目源文件列表
set(PROJECT_SOURCES
    entrydelegate.cpp
    entrydialog.cpp
    entrydialog.ui
    main.cpp
    mainwindow.cpp
    mainwindow.ui
)

#如果Qt主要版本大于等于6,则使用qt_add_executable创建目标
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(Ganttapireview-manual-test
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# 否则,根据不同的平台和Qt版本使用add_library或add_executable创建目标
else()
    #安卓
    if(ANDROID)
        add_library(Ganttapireview-manual-test SHARED
            ${PROJECT_SOURCES}
        )
# 在Qt 5中定义find_package()调用后的Android属性:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(Ganttapireview-manual-test
            ${PROJECT_SOURCES}
        )
    endif()
endif()

#将Qt Widgets库链接到目标
target_link_libraries(Ganttapireview-manual-test
    PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::PrintSupport
    # 生成的库名称
    kdchart-qt63
    #kdchart
    #testtools
)

# 要链接的动态库的头文件include路径添加到目标文件中
target_include_directories(Ganttapireview-manual-test
    PRIVATE "C:/Program Files (x86)/KDChart/include/KDChart-qt6")

#设置目标属性,如MacOSX Bundle标识符、版本等
set_target_properties(Ganttapireview-manual-test PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

#安装目标文件
install(TARGETS Ganttapireview-manual-test
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

#如果主要Qt版本为6,则使用qt_finalize_executable完成目标的最终设置
if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(Ganttapireview-manual-test)
endif()

构建,选择Release/Debug运行(根据生成的库)

  • 甘特图
image-20231024232332368

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1130181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android View拖拽/拖放DragAndDrop自定义View.DragShadowBuilder,Kotlin(2)

Android View拖拽/拖放DragAndDrop自定义View.DragShadowBuilder&#xff0c;Kotlin&#xff08;2&#xff09; import android.graphics.Canvas import android.graphics.Point import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.util…

关于前端如何下载后端接口返回content-type为application/octet-stream的文件

关于前端如何下载后端接口返回response-type为application/octet-stream的文件 问题描述 后端接口定义为直接返回一个文件&#xff0c;如果带认证信息可以直接通过浏览器url下载&#xff0c;但是接口需要传headers认证信息&#xff0c;url上又不支持传相关信息 解决 前端…

如何用 JMeter 编写性能测试脚本?

Apache JMeter 应该是应用最广泛的性能测试工具。怎么用 JMeter 编写性能测试脚本&#xff1f; 1. 编写 HTTP 性能测试脚本 STEP 1. 添加 HTTP 请求 img STEP 2. 了解配置信息 HTTP 请求各项信息说明&#xff08;以 JMeter 5.1 为例&#xff09;。 如下图所示&#xff1a;…

kibana监控

采取方式 Elastic Agent &#xff1a;更完善的功能 Metricbeat&#xff1a;轻量级指标收集&#xff08;采用&#xff09; 传统收集方法&#xff1a;使用内部导出器收集指标&#xff0c;已不建议 安装 metricbeat Download Metricbeat • Ship Metrics to Elasticsearch | E…

硬件安全与机器学习的结合

文章目录 1. A HT Detection and Diagnosis Method for Gate-level Netlists based on Machine Learning摘要Introduction 2. 基于多维结构特征的硬件木马检测技术摘要Instruction 3. A Hardware Trojan Detection and Diagnosis Method for Gate-Level Netlists Based on Diff…

第一章 系统工程概述|系统建模语言SysML实用指南学习

仅供个人学习记录 系统工程起因 期望当今系统能力较之前有显著提升。 竞争压力要求系统提升技术先进性&#xff1a;提高性能&#xff0c;同时降低成本及缩短交付周期 能力增长驱动需求增长&#xff0c;包括功能、互操作性、性能、可靠性提升与小型化等。 系统不再是孤立的&…

【软考系统架构设计师】2022年系统架构师综合知识真题及解析

本篇文章主要讲解2022年系统架构师综合知识真题及解析 【01】云计算服务体系结构如下图所示&#xff0c;图中①、②、③分别与SaaS、PaaS、Iaas相对应&#xff0c;图中①、②、③应为( )。 解析&#xff1a;答案选择B 从上到下&#xff0c;依次是应用层——平台层——基础设施…

【网络原理】| 应用层协议与传输层协议 (UDP)

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️ 专栏&#xff1a;javaEE初阶 &#x1f397;️ 乾坤未定&#xff0c;你我皆黑马 目录 一、应用层协议二、传输层协议&#xff08;UDP协议&#xff09; 一、应用层协议 应用层是和代码直接相关的一层&#xff0c;决定…

Spark集群中一个Worker启动失败的排错记录

文章目录 1 检查失败节点worker启动日志2 检查正常节点worker启动日志3 查看正常节点spark环境配置4 又出现新的ERROR4.1 报错解释4.2 报错解决思路4.3 端口报错解决操作 集群下电停机后再次启动时&#xff0c;发现其中一台节点的worker启动失败。 1 检查失败节点worker启动日…

常见排序算法之冒泡排序

冒泡排序&#xff0c;英文名Bubble Sort&#xff0c;是一种相对基础的 交换排序方法。这种排序算法的名字来源于它操作的过程&#xff0c;可以类比为数列中的每一个元素都可以像小气泡一样&#xff0c;根据自身的大小一点一点向数组的一侧移动。具体到冒泡排序的工作原理&#…

【Java网络编程】二

本文主要介绍了传输层的UDP协议和TCP协议&#xff0c;以及在Java中如何通过Socket套接字实现网络编程&#xff08;内附UDP和TCP版本的回显服务器代码&#xff09; 一.网络通信 网络编程&#xff0c;就是写一个应用程序&#xff0c;让这个程序可以使用网络通信&#xff0c;这里就…

Day9力扣打卡

打卡记录 掷骰子等于目标和的方法数&#xff08;动态规划&#xff09; 链接 用 f[i][j] 表示投了 i 次投骰子得到点数总和&#xff0c;从而得到状态转移方程 f[i][j]f[i−1][j]f[i−1][j−1]⋯f[i−1][j−min(k−1,j)] 。 class Solution { public:int numRollsToTarget(int…

Tauri2 mobile development traps

时间点&#xff1a;2023/10/24。最近在倒腾移动端开发&#xff0c;不想学原生和 flutter&#xff0c;试了试 react-native&#xff0c;开发体验没有想象中的舒服&#xff0c;干脆直接上 tauri 2 吧&#xff0c;半年前就听说 tauri 2 支持移动端&#xff0c;到现在应该可堪小用。…

Qwt开发环境搭建(保姆级教程)

1.简介 QWT&#xff0c;即Qt Widgets for Technical Applications&#xff0c;其目标是以基于2D方式的窗体部件来显示数据&#xff0c; 数据源以数值&#xff0c;数组或一组浮点数等方式提供&#xff0c; 输出方式可以是Curves&#xff08;曲线&#xff09;&#xff0c;Slider…

C++入门01—从hello word!开始

1.第一个C程序 1.1 创建项目 第一次使用Visual Studio时&#xff1a; 1.2 创建文件 1.3 编写代码 编写第一个代码&#xff1a; #include<iostream> using namespace std; int main() {cout << "hello word!" << endl;system("pause"…

vue3+vite在线预览pdf

效果图 代码 <template><div class"pdf-preview"><div class"pdf-wrap"><vue-pdf-embed :source"state.source" :style"scale" class"vue-pdf-embed" :page"state.pageNum" /></div…

Ivs+keepalived:高可用集群

Ivskeepalived:高可用集群 keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用&#xff0c;keepalived这个软件就是为了实现调度器的高可用。 注意&#xff1a;keepalived不是专门为lvs集群服务的&#xff0c;也可以做其他代理服务器的高可用。 lvs的高可用集群&a…

FFmpeg 解析Glide 缓存下的图片文件报错(Impossible to open xxx)

简单介绍下背景 我们业务有个功能把图片放到一个文件中&#xff0c;统一进行播放 &#xff0c;但是遇到一个棘手问题&#xff0c;某一个情况下 的图片 就是打不开 就是报错。以为是编译参数 。哪些格式没有加上。但经过测试 该加的都加了。 所以 不是编译参数的问题。 Impossi…

Qt之自定义QStringListModel设置背景色和前景色

一.效果 二.实现 QStringListModel里只实现了Qt::EditRole和Qt::DisplayRole,不能直接设置背景色和前景色,所以我们要继承QStringListModel,重写其中的data和setData方法,使其支持Qt::ForegroundRole和Qt::BackgroundRole。 QHStringListModel.h #ifndef QHSTRINGLISTMO…

matplotlib画图之纵坐标乱码

问题&#xff1a; 今天遇到一个问题就是关于使用python中的matplotlib库画学习率的变化图&#xff0c;出现了纵坐标乱码的现象。 具体如下图&#xff08;重点看纵坐标&#xff09;&#xff1a; 解决办法 我检查了传入的数据以为是传入的数据错了&#xff0c;想了半天数据错了和…