Linux下为可执行文件添加图标

      Ubuntu 18.04上使用Qt5.14.2创建一个简单的Qt Widgets项目test,添加2个Push Button按钮,点击分别获取github和csdn地址,在mainwindow.cpp中添加的代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <string>
#include <iostream>
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_github_addr_clicked()
{static const std::string addr{"https://github.com/fengbingchun"};std::cout << "github add: " << addr << "\n";QMessageBox::information(nullptr, "GitHub Addr", QString::fromStdString(addr), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}void MainWindow::on_pushButton_csdn_addr_clicked()
{static const std::string addr{"https://blog.csdn.net/fengbingchun"};std::cout << "csdn addr: " << addr << "\n";QMessageBox::information(nullptr, "CSDN Addr", QString::fromStdString(addr), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}

      编译test,通过run_test.sh脚本执行:此脚本内容如下:

#! /bin/bashLD_LIBRARY_PATH=/home/spring/Qt5.14.2/5.14.2/gcc_64/lib /home/spring/GitHub/test/build-test-Desktop_Qt_5_14_2_GCC_64bit-Release/test

      执行结果如下图所示:

      存在的问题
      1.左侧栏显示没有图标,不便于区分;
      2.可执行程序test只能通过终端执行,且可执行程序没有显示图标,双击无法运行。

      解决左侧栏不显示图标的问题
      1.使用ubuntu中现有的图标,如/usr/share/icons/hicolor/128x128/apps/display-im6.q16.png;
      2.打开工程的mainwindow.ui文件,属性中的"windowIcon",添加display-im6.q16.png图标,重新编译,再次运行,左侧栏即可显示图标,如下图所示:

      解决可执行程序显示图标并双击可执行的问题
      1.创建desktop文件(desktop entry)即桌面启动器(Desktop Launcher),如test.desktop,内容如下:

[Desktop Entry]
Name=test
Exec=/home/spring/GitHub/test/build-test-Desktop_Qt_5_14_2_GCC_64bit-Release/run_test.sh
Icon=/usr/share/icons/hicolor/128x128/apps/display-im6.q16.png
Type=Application
Terminal=true
Name[en]=test

      2.为test.desktop添加可执行权限(sudo chmod +x test.desktop);
      3.将test.desktop拷贝到/usr/share/applications目录下;
      4.第一次双击test.desktop会弹出对话框"Untrusted application launcher",点击"Trust and Launch",即可运行,结果如下图所示:

     
      1.双击/usr/share/applications下的test.desktop即可运行程序;
      2.test.desktop文件可拷贝到任何目录下,双击都可运行:我是以spring用户登入,如果把test.desktop拷贝到具有root用户的目录下,如build-test-Desktop_Qt_5_14_2_GCC_64bit-Release目录下,双击可能无法运行,会提示"Untrusted application launcher",此时,执行"sudo  chown -R spring:spring build-test-Desktop_Qt_5_14_2_GCC_64bit-Release",将目录所有者由root调整为spring后双击即可运行;
      3.可通过快速启动器启动,即在搜索框中搜索test,如下图所示:也可将其添加到左侧栏,选中点击"Add to Favorites"即可

      4.若双击desktop文件无反应,可能的原因
      (1).desktop文件是否有可执行权限;
      (2).desktop文件中指定的Exec和Icon是否路径正确;
      (3).若Exec指定的可执行文件依赖动态库,此时Exec可以直接指定为可运行的shell脚本,而非可执行程序.

      .desktop文件介绍
      .desktop文件只是一个用于在Linux中启动应用程序的快捷方式。如果没有.desktop文件,你的应用程序将不会显示在"应用程序(Show Applications)"菜单中,并且无法使用启动器启动,只能通过终端执行它。
      .desktop文件是一个简单的文本文件,其中保存有关程序的信息。它通常放置在"~/.local/share/applications"(对于特定于用户的应用程序)或"/usr/share/applications/"(对于系统范围内安装的应用程序)中.
      在Linux中,可执行程序显示图标(icon)是在/usr/share/applications目录下的.desktop文件中设置的。将选择的图标存放在/usr/share/icons/hicolor对应大小的apps目录中。可以选择不同尺寸的图标。支持文件后缀名为:.png,.svg等

      .desktop文件中的字段(Keys):仅Type和Name是必需的,其它为可选的
      1.Type:定义了3种类型的桌面条目(desktop entry),可指定为Application、Link、Directory
      (1).Application:定义如何启动应用程序;
      (2).Link:定义URL的快捷方式;
      (3).Directory:定义应用程序菜单中子菜单的外观;
      2.Name:应用程序的名字;
      3.Version:该desktop文件所遵循的桌面条目规范的版本;并不是应用程序的版本;
      4.Comment:用于工具(tooltip)提示,旨在包含任何有用的附加信息;该值不应与"Name"和"GenericName"的值重复;
      5.Path:如果条目的类型为Application,则为运行程序的目录;
      6.Exec:要执行的程序,可能带有参数;
      7.Icon:用于显示此条目的图标的名称;如果名称是绝对路径,则将使用给定的文件;如果名称不是绝对路径,则将使用图标主题规范(Icon Theme Specification)中描述的算法来定位图标;
      8.Terminal:程序是否在终端中运行;
      9.GenericName:此应用程序提供的功能;Name、GenericName和Comment通常包含组合形式的冗余值,应避免这种情况。

      有些字段可能已被弃用,可使用"desktop-file-validate"命令验证.desktop文件:将提供非常详细且有用的警告和错误信息,如无误将不会输出任何信息。

      更详细的字段介绍可参考:desktop-entry-spec

      Icon:以下命令对所有图像操作都是通用的,并不仅针对图标
      1.可使用convert命令将不支持的图标转换为支持的格式;
      2.可使用identify命令查看图像的大小。

      GitHub:https://github.com/fengbingchun/Qt_Test

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

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

相关文章

从零开发短视频电商 在AWS上用SageMaker部署开源模型并用Java SDK调用

文章目录 1.创建AWS账户2.登录AWS3.创建域4.部署模型方式一 使用JumpStart可视化界面部署内置的模型方式二 采用python脚本部署私有模型5.调用模型AWS Java SDK调用Http调用6.监控7.自动扩缩容1.创建AWS账户 需要准备好邮箱一个,支持visa功能的信用卡一个。然后到aws上自己去…

电梯安全远程监控系统解决方案

一、方案背景 随着万丈高楼的平地起&#xff0c;电梯也成为了我们出入高层建筑最常用的工具之一。面对电梯数量的不断增加&#xff0c;电梯安全事故也是相继频发&#xff0c;因此关于电梯的安全运行就越来越受到社会各界的关注。电梯的使用在给人们出入高层建筑带来便利的同时&…

分布式ID生成框架Leaf升级踩坑

背景&#xff1a; 在项目中需要一个统一的拿单号等唯一ID的服务&#xff0c;就想起了之前用到的leaf&#xff0c;但是因为项目要求&#xff0c;leaf的版本不符合&#xff0c;需要做一些升级 项目地址&#xff1a;https://github.com/Meituan-Dianping/Leaf 升级点&#xff1…

STM32-(串口通信)

什么是通信&#xff1f; 数据交互信息传递条件&#xff1a;两个端 发送端 一、通信基础知识 1、时钟信号划分 同步通信&#xff1a;通信双方根据同步信号通信&#xff0c;比如双方有一个共同的时钟信号(SPI全双工 I2C半双工) 异步通信&#xff1a;通信双方有自己独立的系统时…

【解决方案】基于物联网表计的综合能源管理方案

安科瑞顾强 为加快推进国家“双碳”战略和新型能源体系建设&#xff0c;努力实现负荷准确控制和用户精细化管理&#xff0c;按照“政府主导、电网组织、政企协同、用户实施”的指导原则&#xff0c;多地成立市/县级电力负荷管理中心&#xff0c;包括浙江宁波、慈溪、辽宁大连、…

Java——》JSONObjet 数据顺序

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

1_企业架构之LNMP

公司企业架构LNMP(单点服务器部署) 学习目标和内容 1、能够描述项目流程 2、能够了解PV、QPS、DAU等参数 3、能够实现服务器基本环境配置 4、能够部署配置MySQL生产环境 5、能够部署配置Nginx生产环境 6、能够部署配置PHP生产环境 7、能够理解PHP-FPM和Nginx关联关系 8、能够配…

思维模型 逆向思维

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。弱者道之用反者道之动。 1 逆向思维的应用 1.1 历史典故 1 曹冲称象 这个故事讲述的是曹操的儿子曹冲如何利用逆向思维解决了称大象重量的难题。曹冲没有直接去称大象的重量&#xff0c;…

海云安谢朝海:开发安全领域大模型新实践 人工智能助力高效安全左移

2023年11月29日&#xff0c;2023中国&#xff08;深圳&#xff09;金融科技大会成功举行&#xff0c;该会议是深圳连续举办的第七届金融科技主题年度会议&#xff0c;也是2023深圳国际金融科技节重要活动之一。做好金融工作&#xff0c;需要兼顾创新与安全&#xff0c;当智能体…

在表格中显示字典的内容(根据后端返回的数据)vue3

进入页面&#xff0c;调接口&#xff0c;后端返回数据&#xff0c;indexType为0或者1&#xff0c;要用这个数据显示字典的内容 用插槽拿到数据 写一个函数&#xff0c;在模板中使用 const { proxy } getCurrentInstance(); // 字典-指标类型 const { index_type } proxy.u…

谈谈Listener

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 Tomcat三大组件&#x…

分享82个节日PPT,总有一款适合您

分享82个节日PPT&#xff0c;总有一款适合您 82个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1boDTl3PiHFXLJ890CoUfJA?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。…

windows配置go调用python的编译环境

go是支持调用python代码的&#xff0c;之前写了几篇linux的部署教程&#xff0c;因为觉得windows的不复杂就没有写&#xff0c;结果今天新部署一个Windows的环境&#xff0c;有些步骤想不起来了&#xff0c;好记性不如烂笔头&#xff0c;还是记录一下吧。 这些是之前写的linux…

CTF-虚拟机-QEMU-前置知识-操作流程与源码阅读

文章目录 总览内存PCI设备PCI配置空间前64个字节对应源码Memorry空间的BARIO空间的BAR MMIOPMIOIspci访问PCI设备配置空间中的Memory空间和IO空间MMIOPMIO QQM&#xff08;qemu object model&#xff09;简洁概要将 TypeInfo 注册 TypeImpl&#xff1a;ObjectClass的初始化&…

SAS聚类分析介绍

1 聚类分析介绍 1.1基本概念 聚类就是一种寻找数据之间一种内在结构的技术。聚类把全体数据实例组织成一些相似组&#xff0c;而这些相似组被称作聚类。处于相同聚类中的数据实例彼此相同&#xff0c;处于不同聚类中的实例彼此不同。聚类技术通常又被称为无监督学习&#xff0…

深入了解Vue.js:构建现代、响应式的前端应用

文章目录 1. Vue.js简介1.1 安装Vue.js 2. Vue的核心概念2.1 数据驱动2.2 组件化2.3 生命周期钩子 3. Vue的特性3.1 响应式数据3.2 模板语法3.3 组件通信 4. 示例项目结语 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1…

Jmeter性能测试 —— 压力模式

压力模式 性能测试中的压力模式有两种。 第一种是并发用户模式&#xff08;虚拟用户模式&#xff09;并发用户是指虚拟并发用户数&#xff0c;从业务角度&#xff0c;也可以理解为同时在线的用户数。 从客户端的角度出发&#xff0c;摸底业务系统各节点能同时承载的在线用户数…

pytorch中Conv1d、Conv2d与Conv3d详解

1 卷积介绍 1.1 什么是卷积 卷积&#xff08;convolution&#xff09;&#xff0c;是一种运算&#xff0c;你可以类比于加&#xff0c;减&#xff0c;乘&#xff0c;除&#xff0c;矩阵的点乘与叉乘等等&#xff0c;它有自己的运算规则&#xff0c;卷积的符号是星号*。表达式…

Linux Makefile的认识及CMake的使用

1 Makefile的作用 Makefile 指的是一个叫 Makefile 的文件,里面提前写了一些指令。每次要自动化的完成一个比较复杂项目的自动编译用的时候,就在命令行输入“make”命令Makefile使用。使用Makefile可以 “智能” 的知道: 1 哪些文件需要先进行编译。 2 当某一文件在某次mak…

Blast中文手册(4)

Extracting data from BLAST databases with blastdbcmd(用blastdbcmd从BLAST数据库中提取数据) Created: June 23, 2008; Updated: January 7, 2021. Extract lowercase masked FASTA from a BLAST database with masking information(从具有掩码信息的BLAST数据库中提取小写掩…