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

news2024/10/5 15:28:10

      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/bash

LD_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.coloradmin.cn/o/1277168.html

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

相关文章

shell 脚本计算距离最近的坐标

shell 脚本计算距离最近的坐标 坐标数据文件geo.log格式如下&#xff1a; beijing(116.405285,39.904989) tinajin(117.190182,39.125596) hebei(114.502461,38.045474) shanxi(112.549248,37.857014) neimenggu(111.670801,40.818311) liaoning(123.429096,41.796767) jilin(1…

LeetCode | 100. 相同的树

LeetCode | 100. 相同的树 OJ链接 判断两个节点是否等于空&#xff0c;两个都等于空就直接返回true如果一个等于空&#xff0c;另一个不等于空&#xff0c;说明false然后再判断两个树的值是否相等最后递归p的左&#xff0c;q的左&#xff0c;p的右&#xff0c;q的右 bool isS…

SIP协议在语音通信的应用方式及OKCC系统中的配置方法

在企业语音通信的过程中&#xff0c;SIP协议支持的网络通信技术通过网络为用户提供了无数的通信便利&#xff0c;已成为企业不可或缺的重要通信技术。由于SIP协议是语音通信帮助企业实现这些优势的原因&#xff0c;因此了解支持这些呼叫的SIP协议的上下文至关重要。 什么是SI…

大数据之HBase(二)

Master详细架构 位置&#xff1a;namenode实现类&#xff1a;HMaster组成 负载均衡器&#xff1a;通过meta了解region的分配&#xff0c;通过zk了解rs的启动情况&#xff0c;5分钟调控一次分配平衡元数据表管理器&#xff1a;管理自己的预写日志&#xff0c;如果宕机&#xff…

Hertz 整合swagger

文章目录 Swagger安装使用用法项目demoSwagger注释用法通用API信息 swag命令行参数swagger路由配置 Swagger 安装 go get 安装可执行文件需要配合 GOPATH 模式工作。 go get github.com/swaggo/swag/cmd/swag 因为从 Go 1.17 开始&#xff0c;在 go mod 模式下通过 go get 下…

java ssh犯罪数据可视化系统eclipse开发mysql数据库MVC模式java编程网页设计

一、源码特点 JSP ssh犯罪数据可视化系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.…

SpringBoot整合Activiti7——消息事件(十)

文章目录 消息事件开始事件中间事件边界事件代码实现xml文件测试流程流程执行步骤 消息事件 消息事件只有一个接收者&#xff0c;消息具有名字与载荷。 信息会储存在 act_ru_event_subscr 表中。 <!-- 定义消息 --> <message id"msgId1" name"msgName…

【mysql】mysgld.log文件太大怎么办

我们有一台测试服务器。跑着一个msyq&#xff0c;发现没有空间了。差看日志文件占用了很多。 怎么破 使用下面命令 echo "" >mysqld.log 执行命令后

B.牛牛排队伍——模拟双链表

当前位置: 首页 > news >正文 B.牛牛排队伍——模拟双链表 news 2023/12/1 15:14:37 分析 题目其实很简单,就是双链表的增删查,但是刚开始,直接vis标记删除元素,查找一个位置的前一个用的while不断向前找,但是TLE;毕竟O(n*k)的复杂度,一开始没有考虑时间复杂度…

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

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

【Matlab】如何快速入门一项新技能-以Matlab/Simulink入门为例

目录 1. 引言 2. 背景 3. 快速学习并完成开发 3.1 了解需求&#xff0c;知道要干什么 3.2 了解Matlab/Simulink基本功能 第一步&#xff0c;查看Matlab的中文网站中文网站https://www.ilovematlab.cn/resources/对Matlab/Simulink有了一个初步认识。 3.3 实现一个最简单…

07-原型模式-C语言实现

UML图&#xff1a; 代码实现&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>// 原型接口 typedef struct {void* (*clone)(void*); } Prototype;// 具体原型类 typedef struct {Prototype prototype;char* name;int age; } Concr…

列表插槽使用

{label: 是否展示,prop: isShow,solt: true, }<!--自定义列--><template slot-scope"scope" slot"isShow"><div style"color: red;cursor: pointer" focus"getIsShow(scope.row)" ><el-switch v-model"sco…

Linux部分基础指令讲解

目录 1.echo指令 2.more指令 3.less指令&#xff08;重要&#xff09; 4.head指令 5.tail指令 6.管道| 7.时间相关的指令 8.cal指令 9.find指令 10.grep指令 1.echo指令 我们先看效果 如图所示我们可以看到显示器显示出了hellow world和hellow这两句话&#xff0c;我们的echo的…

图书馆座位预约时间冲突提示(前后端全) 前端elementUI 时间选择器只显示时和分,SQL实现时间冲突判断

背景 帮客户定制项目&#xff0c;要实现图书馆预约座位的功能。 功能描述如下&#xff1a;学生选择开始时间和结束时间&#xff0c;只选择小时和分钟&#xff0c;提交预约后&#xff0c;如果该时间有冲突提示学生修改预约时间。 问题 前端样式选择的是elmentUI&#xff0c;但…

VBA技术资料MF90:在PowerPoint中完成多重查找替换

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

Mysql 行转列,把逗号分隔的字段拆分成多行

目录 效果如下源数据变更后的数据 方法第一种示例SQL和业务结合在一起使用 第二种示例SQL和业务结合在一起使用 结论 效果如下 源数据 变更后的数据 方法 第一种 先执行下面的SQL&#xff0c;看不看能不能执行&#xff0c;如果有结果&#xff0c;代表数据库版本是可以的&…

CSS选择器十二种方法

相信大家对元素应该是不陌生的&#xff0c;当我们页面中&#xff0c;我们想要布局&#xff0c;给元素添加样式的时候&#xff0c;我们应该怎么获取到指定元素呢&#xff1f; 优先级&#xff1a;ID 选择器 > 类选择器 > 标签选择器 > 通配符 1.元素选择器 通过标签名…

lv11 嵌入式开发 中断控制器14

目录 1 中断控制器 ​编辑 2 Exynos4412下的中断控制器 2.1 概述 2.2 特征 ​编辑 2.3 中断状态 2.4 中断类型 2.5 中断控制器GIC中断表 3 中断控制器寄存器详解 3.1 ICDDCR&#xff08;Interrupt Controller Distributor Control Register&#xff09; 3.2 ICDISER…

备战春招——12.1 算法

动态规划 动态规划的核心思想就是 本次只由上一次决定。 爬楼梯 第3阶由&#xff08;第1节2&#xff09;和&#xff08;第二节1&#xff09;&#xff0c;不要想着往下迭代&#xff0c;不然那是个无穷底。所以f(x)f(x-1)f(x-2) (x>2)。所以就是当前只与上个操作相关。 cla…