LidarView之定制版本

news2024/12/23 9:44:48

介绍

LidarView软件定制开发需要关注几点:1.应用程序名称;2.程序logo;3.Application版本号;4.安装包版本号

应用程序名称

在项目的顶层cmake里边可以指定程序名称

project(LidarView)

需要指定跟Superbuild一样的编译类型

set(CMAKE_BUILD_TYPE "Release")

程序logo

Application\SoftwareInformation目录下的logo.ico文件可以指定应用程序的logo,打包exe的logo也可以在iss脚本里边声明,启动页面的logo也是位于Application\SoftwareInformation目录下(Splash.jpg)

Application版本号

改变LV_VERSION_FULL可达到改变软件版本号的目的

SET(LV_VERSION_FULL "V1.3.0")

标题栏版本号
在这里插入图片描述
关于对话框
在这里插入图片描述

安装包版本号

在Inno Setup Compiler iss脚本里边通过指定宏MyAppVersion改变安装包版本号

#define MyAppName "LidarViewer"
#define MyAppVersion "V1.3.0"
#define MyAppPublisher "Copyright @2023 lidarviwer"
#define MyAppURL ""
#define MyAppExeName "LidarViewer.exe"
#define MyAppAssocName MyAppName + " File"
#define MyAppAssocExt ".myp"
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt

代码分析

ParaViewClient.cmake里边定义了paraview_client_add函数,该函数在Application目录下的CMakeLists.txt文件里边调用,需要给LV_VERSION_FULL赋值传递软件版本号信息,APPLICATION_ICON传递软件图标信息

paraview_client_add(
  NAME ${SOFTWARE_NAME} #Name of the Target
  NAMESPACE "LidarView"
  VERSION ${LV_VERSION_FULL}
  APPLICATION_NAME "${SOFTWARE_NAME}"
  ORGANIZATION "${SOFTWARE_VENDOR}"
  TITLE "${SOFTWARE_NAME} ${LV_VERSION_FULL} ${LV_BUILD_PLATFORM}"
  SPLASH_IMAGE     "${CMAKE_CURRENT_SOURCE_DIR}/SoftwareInformation/Splash.jpg"
  BUNDLE_ICON      "${CMAKE_CURRENT_SOURCE_DIR}/logo.icns"
  APPLICATION_ICON "${CMAKE_CURRENT_SOURCE_DIR}/SoftwareInformation/logo.ico"
  
  REQUIRED_PLUGINS LidarPlugin VelodynePlugin

  MAIN_WINDOW_CLASS vvMainWindow
  MAIN_WINDOW_INCLUDE vvMainWindow.h
  SOURCES ${source_files}
  APPLICATION_XMLS
    ${CMAKE_CURRENT_SOURCE_DIR}/vvSources.xml
    ${CMAKE_CURRENT_SOURCE_DIR}/vvFilters.xml
  
  RUNTIME_DESTINATION ${LV_INSTALL_RUNTIME_DIR}
  LIBRARY_DESTINATION ${LV_INSTALL_LIBRARY_DIR}
)

② 然后paraview_client_add根据软件名词、版本号、应用logo等信息自动生成pqLidarViewInitializer对象,软件版本会在Initialize成员函数里边调用

#if _paraview_client_TITLE
  this->MainWindow->setWindowTitle("LidarView V1.3.0 Windows-AMD64");
#endif

aboutDialog.py里边的showDialog函数会对about对话框的版本号进行设置

def showDialog(mainWindow):

    loader = QtUiTools.QUiLoader()
    uifile = QtCore.QFile(':/vvResources/vvAboutDialog.ui')
    if not uifile.open(uifile.ReadOnly):
        print("Canno't open the ui for the about dialog.")
        return

    dialog = loader.load(uifile, mainWindow)
    uifile.close()
    dialog.setModal(True)

    def w(name):
        for widget in dialog.children():
            if widget.objectName == name:
                return widget

    image = w('splashLabel')
    splash = image.pixmap.scaled(image.pixmap.width()/2.0, image.pixmap.height()/2.0)
    image.setPixmap(splash)
    image.adjustSize()

    appName = mainWindow.windowTitle.split(" ")[0]
    appVersionTag = mainWindow.windowTitle.split(" ")[1]
    appBitTag = mainWindow.windowTitle.split(" ")[2]
    dialog.windowTitle = "About " + appName + " ..."
    copyrightText = '''<h1>{0} {1} {2}</h1><br/>
                       Provided by <a href=""></a><br />
                       <br />
                    '''.format(appName, appVersionTag, appBitTag)
    w('copyrightLabel').setText(copyrightText)
    
    textBoxContent = '''<h4>License</h4>
                        LidarViewer is provided under the Apache License 2.0.<br /><br />
                        The initial developer of some parts of the framework, which are 
                        copied from, derived from, or inspired by LidarView open source project.
                        <br />
                     '''
    w('detailsLabel').setText(textBoxContent)
    
    
    button = w('closeButton')
    closeIcon = QtGui.QApplication.style().standardIcon(QtGui.QStyle.SP_DialogCloseButton)
    button.setIcon(closeIcon)
    button.connect(button, QtCore.SIGNAL('clicked()'), dialog, QtCore.SLOT('close()'))
    dialog.adjustSize()
    dialog.setFixedSize(dialog.size)

    dialog.exec_()

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

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

相关文章

英语学习之fruit

目录 不熟悉熟悉 不熟悉 breadfruit 面包果 date 椰枣 raspberry 覆盆子 blackberry 黑莓 blackcurrant 黑加仑&#xff0c;黑醋栗 plum 李子 熟悉 apple 苹果&#x1f34e; coconut 椰子&#x1f965; banana 香蕉&#x1f34c; tomato 西红柿 pear 梨子 watermelon 西瓜…

30款免费好用的工具,打工人必备!

免费工具软件&#xff0c;办公人必备&#xff0c;提升工作效率 启动盘制作&#xff1a;Ventoype工具&#xff1a;微PEwindows/office jh工具&#xff1a;HEU KMS Activator桌面资料转移工具&#xff1a;个人资料专业工具右键菜单管理&#xff1a;ContextMenuManager驱动安装&a…

【面试八股总结】GMP模型

GMP概念 G&#xff08;Goroutine&#xff09;&#xff1a;代表Go协程&#xff0c;是参与调度与执行的最小单位。 存储Goroutine执行栈信息、状态、以及任务函数等。G的数量无限制&#xff0c;理论上只受内存的影响。Goroutines 是并发执行的基本单位&#xff0c;相比于传统的线…

虽难必学系列:Netty

Netty 是一个基于 Java 的高性能、异步事件驱动的网络应用框架&#xff0c;广泛用于构建各类网络应用&#xff0c;尤其是在高并发、低延迟场景下表现出色。作为一个开源项目&#xff0c;Netty 提供了丰富的功能&#xff0c;使得开发者可以轻松构建协议服务器和客户端应用程序。…

Nginx从入门到入土(一):DNS域名解析

前言 hostName&#xff0c;在Linux系统上是一个命令&#xff0c;用来显示和设置系统的主机名称。其实它就是域名。 常见的域名有我们熟悉的taobao.com;baidu.com等等。 我们在地址栏输入baidu.com 进入的就是此页面。我们看到地址栏里显示的是www.baidu.com 。 注意&#xf…

MySQL篇(运算符)(持续更新迭代)

目录 一、简介 二、运算符使用 1. 算术运算符 1.1. 加法运算符 1.2. 减法运算符 1.3. 乘法与除法运算符 1.4. 求模&#xff08;求余&#xff09;运算符 2. 比较运算符 2.1. 等号运算符 2.2. 安全等于运算符 2.3. 不等于运算符 2.4. 空运算符 2.5. 非空运算符 2.6.…

Java数据存储结构——平衡二叉树

文章目录 22.1.3 平衡二叉树22.1.3.1 LL22.1.3.2 LR22.1.3.3 RR22.1.3.4 RL 22.1.3 平衡二叉树 平衡二叉树的特点&#xff1a; 二叉树左右两个子树的高度差不超过1任意节点的左右两个子树都是一颗平衡二叉树 在原来的平衡二叉树中&#xff0c;新增数据会破坏平衡性&#xff…

Linux per memcg lru lock

内核关于per memcg lru lock的重要提交&#xff1a; f9b1038ebccad354256cf84749cbc321b5347497 6168d0da2b479ce25a4647de194045de1bdd1f1d 背景 自电子计算机诞生以来&#xff0c;内存性能一直是行业关心的重点。内存也随着摩尔定律&#xff0c;在大小和速度上一直增长。云…

Linux系统上搭建Vulhub靶场

Linux系统上搭建Vulhub靶场 ​vulhub​ 是一个开源的漏洞靶场&#xff0c;它提供了各种易受攻击的服务和应用程序&#xff0c;供安全研究人员和学习者测试和练习。要在 Linux 系统上安装和运行 vulhub​&#xff0c;可以按照以下步骤进行&#xff1a; 1. 安装 Docker 和 Docke…

数据结构(八)——Java实现七大排序

一、插入排序 1.直接插入排序 public static void insertSort(int []arr){for (int i 0; i < arr.length; i) {int j i-1;int tmp arr[i];for (; j >0 ; j--) {if(arr[j] > tmp){arr[j1] arr[j];}else{break;}}arr[j1] tmp;}}直接插入排序特性总结 1. 元素集合越…

【算法】滑动窗口—最小覆盖子串

题目 ”最小覆盖子串“问题&#xff0c;难度为Hard&#xff0c;题目如下&#xff1a; 给你两个字符串 S 和 T&#xff0c;请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串&#xff0c;则算法返回空串&#xff0c;如果存在这样一个子串&#xff0c;则可…

【三大运营商】大数据平台体系架构【顶层规划设计】

在国内运营商&#xff08;如中国移动、中国联通、中国电信&#xff09;的大数据平台建设中&#xff0c;顶层规划设计至关重要。以下是针对三大运营商为例【如电信】的大数据平台体系架构的顶层规划设计方案&#xff0c;涵盖整体架构、关键组件、数据管理、应用场景等方面。 1. …

C#数据结构与算法实战入门指南

前言 在编程领域&#xff0c;数据结构与算法是构建高效、可靠和可扩展软件系统的基石。它们对于提升程序性能、优化资源利用以及解决复杂问题具有至关重要的作用。今天大姚分享一些非常不错的C#数据结构与算法实战教程&#xff0c;希望可以帮助到有需要的小伙伴。 C#经典十大排…

音视频入门基础:AAC专题(6)——FFmpeg源码中解码ADTS格式的AAC的Header的实现

一、引言 通过FFmpeg命令&#xff1a; ./ffmpeg -i XXX.aac 可以获取到ADTS格式的AAC裸流的音频采样频率、声道数、采样位数、码率等信息&#xff1a; 在vlc中也可以获取到这些信息&#xff08;vlc底层也使用了FFmpeg进行解码&#xff09;&#xff1a; 所以FFmpeg和vlc是怎样…

【混淆矩阵】Confusion Matrix!定量评价的基础!如何计算全面、准确的定量指标去衡量模型分类的好坏??

【混淆矩阵】Confusion Matrix&#xff01;定量评价的基础&#xff01; 如何计算全面、准确的定量指标去衡量模型分类的好坏&#xff1f;&#xff1f; 文章目录 【混淆矩阵】Confusion Matrix&#xff01;定量评价的基础&#xff01;1. 混淆矩阵2.评价指标3.混淆矩阵及评价指标…

Redis基础数据结构之 ziplist 压缩列表 源码解读

目录标题 ziplist 是什么?ziplist 特点ziplist 数据结构ziplist 节点pre_entry_lengthencoding 和 lengthcontent ziplist 基本操作插入&#xff08;Insertion&#xff09;删除&#xff08;Deletion&#xff09;查找&#xff08;Search&#xff09;更新&#xff08;Update&…

Qt多元素控件——QTableWidget

文章目录 QTabWidget核心属性、方法和信号使用示例 QTabWidget核心属性、方法和信号 QTableWidget表示一个表格控件&#xff0c;一个表格中包含若干行&#xff0c;每一行包含若干列。 表格中的每一个单元格&#xff0c;是一个QTableWidgetItem对象。 QTableWidget核心方法&a…

Java 每日一刊(第9期):数组

文章目录 前言什么是数组初始化数组如何访问和操作数组遍历数组多维数组数组的常见操作复制数组排序数组搜索数组 数组的长度和异常处理Arrays 工具类本期小知识 “简单是效率的灵魂。” 前言 这里是分享 Java 相关内容的专刊&#xff0c;每日一更。 本期将为大家带来以下内…

云计算和虚拟化技术 背诵

https://zhuanlan.zhihu.com/p/612215164 https://zhuanlan.zhihu.com/p/612215164 云计算是指把计算资源、存储资源、网络资源、应用软件等集合起来&#xff0c;采用虚拟化技术 &#xff0c;将这些资源池化&#xff0c;组成资源共享池&#xff0c;共享池即是“云”。 云计算…

从零开始学习Linux(12)---进程间通信(信号量与信号)

1.信号量 信号量是计算机科学中用于同步和互斥的一种抽象数据类型。在并发编程中&#xff0c;当多个进程或线程需要访问共享资源时&#xff0c;信号量用来确保资源在同一时刻只被一个进程或线程访问&#xff0c;从而避免竞争条件。 信号量通常具有以下特性&#xff1a; 整…