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/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.mfbz.cn/a/211814.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 互斥锁 读写锁 条件变量 信号量 (备查)

线程同步 1&#xff09;所谓的同步并不是多个线程同时对内存进行访问&#xff0c;而是按照先后顺序依次进行的。 2&#xff09;如没有对线程进行同步处理&#xff0c;会导致多个线程访问共享资源出现数据混乱的问题。 3&#xff09;所谓共享资源就是多个线程共同访问的变量&…

javaweb校车校园车辆管理系统springboot+jsp

结构设计&#xff1a;总体采用B/S结构设计模式 (1)用户登录模块&#xff1a;用户通过手动登录&#xff0c;检测是否是校内人员的车辆。 (2)用户车辆信息编辑、上传、模块&#xff1a;通过上传车辆入场信息的操作权限&#xff0c;以用户的名义发布资料上传至校园停车场系统中。…

可视化数据库管理客户端:Adminer

简介&#xff1a;Adminer&#xff08;前身为phpMinAdmin&#xff09;是一个用PHP编写的功能齐全的数据库管理工具。与phpMyAdmin相反&#xff0c;它由一个可以部署到目标服务器的文件组成。Adminer可用于MySQL、PostgreSQL、SQLite、MS SQL、Oracle、Firebird、SimpleDB、Elast…

Java+SSM+MySQL基于微信的在线协同办公小程序(附源码 调试 文档)

基于微信的在线协同办公小程序 一、引言二、系统设计三、技术架构四、管理员功能设计五、员工功能设计六、系统实现七、界面展示八、源码获取 一、引言 随着科技的飞速发展&#xff0c;移动互联网已经深入到我们生活的各个角落。在这个信息时代&#xff0c;微信作为全球最大的…

头歌JUnit单元测试相关实验入门

一、入门实验 1.1第一个Junit测试程序 任务描述 请学员写一个名为testSub()的测试函数&#xff0c;来测试给定的减法函数是否正确。 相关知识 Junit编写原则 1、简化测试的编写&#xff0c;这种简化包括测试框架的学习和实际测试单元的编写。 2、测试单元保持持久性。 3、利用…

【Python】Python给工作减负-读Excel文件生成xml文件

目录 ​前言 正文 1.Python基础学习 2.Python读取Excel表格 2.1安装xlrd模块 2.2使用介绍 2.2.1常用单元格中的数据类型 2.2.2 导入模块 2.2.3打开Excel文件读取数据 2.2.4常用函数 2.2.5代码测试 2.2.6 Python操作Excel官方网址 3.Python创建xml文件 3.1 xml语法…

计算机组成原理,硬件组成,存储器,控制器,控制器的任务, 运算器,中央处理器CPU,主存

计算机组成原理 课程需求 前导课程&#xff1a; 后继课程 汇编 操作系统 数逻 组成 系统结构 数电 微机原理 课程结构 计算机特性 1 从外部角度来看计算机的特性 快速 通用 准确 逻辑 2从外部特性与内部特性的关系 计算机组成 一 硬件组成 运算器 主要功能是进行算术…

强化学习(一)——基本概念及DQN

1 基本概念 智能体 agent &#xff0c;做动作的主体&#xff0c;&#xff08;大模型中的AI agent&#xff09; 环境 environment&#xff1a;与智能体交互的对象 状态 state &#xff1b;当前所处状态&#xff0c;如围棋棋局 动作 action&#xff1a;执行的动作&#xff0c;…

CRM系统是怎样帮助销售流程自动化的?

销售业绩是衡量企业经营的重要指标&#xff0c;也是销售人员一直要达成的目标。销售业绩能否提高取决于销售人员的能力、客户服务水平&#xff0c;还需要借助有效的工具。CRM系统就是这样的一款软件。企业如何提高销售业绩&#xff1f;不妨试试CRM销售流程自动化。 CRM如何实现…

【从删库到跑路 | MySQL总结篇】事务详细介绍

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、事务…

JavaScript 数据结构

JavaScript 数据结构 目录 JavaScript 数据结构 一、标识符 二、关键字 三、常量 四、变量 每一种计算机编程语言都有自己的数据结构&#xff0c;JavaScript脚本语言的数据结构包括&#xff1a;标识符、常量、变量、保留字等。 一、标识符 标识符&#xff0c;说白了&…

使用gcloud SDK 管理和部署 Cloud run service

查看cloud run 上的service 列表&#xff1a; gcloud run services list > gcloud run services listSERVICE REGION URL LAST DEPLOYED BY LAST DEPL…

【QT】Windows环境下,cmake引入QML

这里使用的QT库为5.7版本。 1、添加环境变量 QT库根目录环境变量 QTDIR QT库平台插件环境变量 QT_PLUGIN_PATH QML支持环境变量 QML2_IMPORT_PATH &#xff08;该环境变量仅在需要使用QML时添加&#xff09; QT库动态库环境变量&#xff0c;bin目录下包含了QT程序运行所需的dl…

常见的攻击防护

只做模拟机器使用&#xff0c;不使用真实机器 目录 一、 DHCP饿死和防护应对措施.................................. 1 1&#xff0c; 实验拓扑&#xff1a;...................................................... 2 2&#xff0c; 实验配置............................…

AD23等间距拉线、布线的方法

U M 键进行多根走线&#xff0c; 多根走线想保持10个mil 我可以直接按table键,弹出Multi-Routing ponent&#xff0c;项的Bus Spadng输入框中填充10个mil&#xff0c;新走线产生10个mil的等间距 保持最小的一个规则&#xff0c;可以去到6mil线距。 在拉线操作过程中&#…

详解Spring中BeanPostProcessor在Spring工厂和Aop发挥的作用

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

TCP连接为什么是三次握手,而不是两次和四次

答案 阻止重复的历史连接同步初始序列号避免资源浪费 原因 阻止重复的历史连接&#xff08;首要原因&#xff09; 考虑这样一种情况&#xff1a; 客户端现在要给服务端建立连接&#xff0c;向服务端发送了一个SYN报文段&#xff08;第一次握手&#xff09;&#xff0c;以表示请…

Mininet学习记录(常用命令+创建网络拓扑+OpenDaylight显示拓扑结构)

目录 1.Mininet简介2.Mininet常用命令2.1创建网络拓扑常用参数2.2常用的内部交换命令 3.创建网络拓扑的三种方式3.1通过命令行创建3.2通过miniedit可视化界面创建3.3通过python脚本创建 4.问题总结 1.Mininet简介 Mininet 是由一些虚拟的终端节点 (end-hosts) 、交换机、路由器…

【STM32】TIM定时器

第一部分&#xff1a;定时器基本定时的功能&#xff1b; 第二部分&#xff1a;定时器的输出比较功能&#xff1b; 第三部分&#xff1a;定时器输入捕获的功能&#xff1b; 第四部分&#xff1a;定时器的编码接口。 1 TIM简介 TIM&#xff08;Timer&#xff09;定时器&#…

【数据库】数据库基于封锁机制的调度器,使冲突可串行化,保障事务和调度一致性

封锁使可串行化 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更…