如何 发布qt5程序 ico 图标

Python022

如何 发布qt5程序 ico 图标,第1张

在Qt助手(assistant.exe)搜索关键字"Setting the Application Icon"就可以看到在各种平台设置Qt程序图标的方法,包括QT支持的Windows、MAC、Linux(KDE和GNOME)都有相应的方法。

下面是我翻译的关于Qt5.2:Setting the Application Icon的译文,如有不合理的地方还望大家指出,原文来自QT5.2助手的【Set the Application Icon】一节。

设置应用程序图标

应用程序图标,通常显示在一个应用程序的顶层窗口的左上角,可以通过调用QWindow:: setWindowIcon()设置。

为了改变可执行的应用程序文件本身的图标,因为它被呈现在桌面上(即,在应用之前执行)上,有必要使用另一个依赖于平台的技术。

内容

一、 在Windows上设置应用程序图标

二、 在 Mac OS X上设置应用程序图标

三、 在通用的Linux桌面上设置应用程序图标

1、K桌面环境 (KDE)

2、GNOME

一、在Windows上设置应用程序图标

首先,创建一个包含icon图像的一个ico格式的位图文件。这个可以使用诸如微软的VC++来完成:

选择File|New菜单,然后在出现的对话框中选择File选项卡,并选择图标。(注意:你不需要加载你的应用程序到Visual C++中;在这里我们只使用其图标编辑器。)

保存上面的icon文件到你的应用程序的源代码目录,例如,名为myappico.ico。

然后,假设你正在使用qmake生成你的makefile文件,你只需要添加一个单一的行到您的Pro项目文件:

[cpp] view plaincopy

RC_ICONS = myappico.ico

最后,重新生成你的makefile和你的应用程序。exe文件将通过在资源管理器中的图标来表示。

然而,如果您已经有了一个.rc文件,例如名为myapp.rc文件,您想重用该文件,那么需要以下的两个步骤:

首先,在myapp.rc文件中添加一个单行的文本,如下:

[cpp] view plaincopy

IDI_ICON1 ICONDISCARDABLE "myappico.ico"

然后,在你的myapp.pro文件中添加如下行:

[cpp] view plaincopy

RC_FILE = myapp.rc

如果你不使用qmake,必需的步骤是:首先,创建一个.rc文件,并运行rc或windres程序用于该.rc文件,然后将得到的.res结果文件链接到你的应用程序。

二、在 Mac OS X上设置应用程序图标

应用程序图标,通常显示在应用程序的停靠区域,是通过调用QWindow::setWindowIcon()在窗口上设置。在函数调用之前,程序可能出现在应用程序的停靠区域,这是可能的;在这种情况下,默认的图标会弹跳的动画过程中出现。

为了确保正确的图标出现,当应用程序被启动,和在Finder这两种情况下,有必要采用一种平台相关的技术。

虽然许多程序可以创建图标文件(.icns),推荐的方法是使用由苹果公司(在Developer/Application文件夹)提供的图标编辑器程序。图标编辑器允许您导入多个不同大小的图标(在不同的上下文中使用),以及与他们一起去的屏蔽图。在您的项目目录中将所有一系列的图标保存在一个文件中。

如果您正使用qmake生成makefile文件,您只需要将一个单一的行添加到您的.pro工程文件。例如,如果您的图标文件的名称是myapp.icns,并且您的项目文件名称是myapp.pro,加入这一行到myapp.pro:

[cpp] view plaincopy

ICON = myapp.icns

这将确保qmake把你的图标放在适当的位置并为图标创建一个Info.plist条目。

如果你不使用qmake,你必须手动执行以下几点:

1、为您的应用程序(使用PropertyListEditor,在Developer/Applications中可以找到)创建一个Info.plist文件。

2、在Info.plist文件(同样,使用PropertyListEditor)关联您的.icns记录和CFBundleIconFile记录。

3、将Info.plist文件复制到你的应用程序包的Contents目录。

4、复制.icns文件到你的应用程序包的Contents/Resoures目录。

三、在通用的Linux桌面上设置应用程序图标

在本节中,我们简要地介绍一下在两种常见的Linux桌面环境:KDE和GNOME,为应用程序提供图标的相关问题 。为这两种桌面,用来描述应用程序图标的核心技术是相同的,也可以适用于其他,但具体到每一个来讲也有各自的细节。对使用这些Linux桌面系统的标准信息的主要来源是freedesktop.org。有关其他Linux桌面的信息,请参阅您感兴趣的桌面文档。

通常情况下,用户不直接使用可执行文件,而是通过点击桌面上的图标来启动应用程序。这些图标是包含带有关于它的图标信息的应用程序的描述表示的“桌面项”文件。这两种桌面环境都能够在这些文件中检索信息,并且可以用它们来生成应用程序的快捷方式到桌面上,在开始菜单中,或者在面板上。

有关桌面项文件的更多信息,可以在Desktop Entry Specification中找到。

虽然桌面项文件可以有效地封装应用程序的详细信息,我们仍然需要将图标存储在每个桌面环境中的常规位置。用于图标的一些位置在Icon Theme Specification中给出了。

虽然用于定位图标的路径依赖于在桌面上的使用和它的配置,下面所有这些目录结构应该遵循相同的模式:子目录都按照主题,图标大小和应用程序类型进行组织。通常,应用程序图标被添加到高彩主题,因此方形的应用程序图标的大小为32像素,它将被存储在hicolor/32x32/apps目录的图标路径的下方。

1、K桌面环境(KDE)

应用程序图标可以被所有用户或者一个单一的用户安装使用。当前登录到他们的KDE桌面的用户可以通过使用kde-config发现这些位置,例如,通过在终端窗口中键入执行下列操作:

[cpp] view plaincopy

kde-config --path icon

通常情况下,被输出到stdout的以冒号分隔的路径列表中包含了用户特定的图标路径和全系统的路径。下面这些目录中,可以根据在Icon Theme Specification中描述的约定来定位并安装图标。

如果您正在专门为KDE开发,你不妨利用KDE build system的优势来配置您的应用程序。这可以确保你的图标被安装在KDE的适当位置。

KDE的开发者网站是http://developer.kde.org/。

2、GNOME

应用程序图标都存储在包含与体系结构无关文件的一个标准全系统目录下。这个位置可以通过使用gnome-config来确定,例如,通过在一个终端窗口中键入以下命令:

[cpp] view plaincopy

gnome-config --datadir

输出在标准输出stdout的路径指的是包含一个名为pixmaps目录的位置这个pixmaps目录中的目录结构中在Icon Theme Specification中进行了描述。

如果您正在专门为GNOME开发,你可能希望使用一组标准的GNU Build Tools,在GTK+/Gnome Application Development book的相关章节也作了说明。这可以确保你的图标被安装在为GNOME中的适当位置。

python代码运行助手是能在网页上运行python语言的工具。因为python的运行环境在很多教程里都是用dos的,黑乎乎的界面看的有点简陋,所以出了这python代码运行助手,作为ide。

实际上,python代码运行助手界面只能算及格分,如果要找ide,推荐使用jupyter。jupyter被集成到ANACONDA里,只要安装了anacoda就能使用了。

回到这个问题:

1、要打开这运行助手首先要下载一个learning.py,如果找不到可以复制如下代码另存为“learning.py”,编辑器用sublime、或者notepad++。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

r'''

learning.py

A Python 3 tutorial from http://www.liaoxuefeng.com

Usage:

python3 learning.py

'''

import sys

def check_version():

    v = sys.version_info

    if v.major == 3 and v.minor >= 4:

        return True

    print('Your current python is %d.%d. Please use Python 3.4.' % (v.major, v.minor))

    return False

if not check_version():

    exit(1)

import os, io, json, subprocess, tempfile

from urllib import parse

from wsgiref.simple_server import make_server

EXEC = sys.executable

PORT = 39093

HOST = 'local.liaoxuefeng.com:%d' % PORT

TEMP = tempfile.mkdtemp(suffix='_py', prefix='learn_python_')

INDEX = 0

def main():

    httpd = make_server('127.0.0.1', PORT, application)

    print('Ready for Python code on port %d...' % PORT)

    httpd.serve_forever()

def get_name():

    global INDEX

    INDEX = INDEX + 1

    return 'test_%d' % INDEX

def write_py(name, code):

    fpath = os.path.join(TEMP, '%s.py' % name)

    with open(fpath, 'w', encoding='utf-8') as f:

        f.write(code)

    print('Code wrote to: %s' % fpath)

    return fpath

def decode(s):

    try:

        return s.decode('utf-8')

    except UnicodeDecodeError:

        return s.decode('gbk')

def application(environ, start_response):

    host = environ.get('HTTP_HOST')

    method = environ.get('REQUEST_METHOD')

    path = environ.get('PATH_INFO')

    if method == 'GET' and path == '/':

        start_response('200 OK', [('Content-Type', 'text/html')])

        return [b'<html><head><title>Learning Python</title></head><body><form method="post" action="/run"><textarea name="code" style="width:90%height: 600px"></textarea><p><button type="submit">Run</button></p></form></body></html>']

    if method == 'GET' and path == '/env':

        start_response('200 OK', [('Content-Type', 'text/html')])

        L = [b'<html><head><title>ENV</title></head><body>']

        for k, v in environ.items():

            p = '<p>%s = %s' % (k, str(v))

            L.append(p.encode('utf-8'))

        L.append(b'</html>')

        return L

    if host != HOST or method != 'POST' or path != '/run' or not environ.get('CONTENT_TYPE', '').lower().startswith('application/x-www-form-urlencoded'):

        start_response('400 Bad Request', [('Content-Type', 'application/json')])

        return [b'{"error":"bad_request"}']

    s = environ['wsgi.input'].read(int(environ['CONTENT_LENGTH']))

    qs = parse.parse_qs(s.decode('utf-8'))

    if not 'code' in qs:

        start_response('400 Bad Request', [('Content-Type', 'application/json')])

        return [b'{"error":"invalid_params"}']

    name = qs['name'][0] if 'name' in qs else get_name()

    code = qs['code'][0]

    headers = [('Content-Type', 'application/json')]

    origin = environ.get('HTTP_ORIGIN', '')

    if origin.find('.liaoxuefeng.com') == -1:

        start_response('400 Bad Request', [('Content-Type', 'application/json')])

        return [b'{"error":"invalid_origin"}']

    headers.append(('Access-Control-Allow-Origin', origin))

    start_response('200 OK', headers)

    r = dict()

    try:

        fpath = write_py(name, code)

        print('Execute: %s %s' % (EXEC, fpath))

        r['output'] = decode(subprocess.check_output([EXEC, fpath], stderr=subprocess.STDOUT, timeout=5))

    except subprocess.CalledProcessError as e:

        r = dict(error='Exception', output=decode(e.output))

    except subprocess.TimeoutExpired as e:

        r = dict(error='Timeout', output='执行超时')

    except subprocess.CalledProcessError as e:

        r = dict(error='Error', output='执行错误')

    print('Execute done.')

    return [json.dumps(r).encode('utf-8')]

if __name__ == '__main__':

    main()

2,再用一个记事本写如下的代码:

@echo off

python learning.py

pause

另存为‘运行.bat’

3、把“运行.bat”和“learning.py”放到同一目录下,

4、双击运行“运行.bat",之后会弹出黑色的dos窗口,这个窗口不要关闭。

5、输入网址对应的网址和端口,整个过程就完成了。