Qt Widgets Application 和 Qt Quick Application两类exe的发布方式。



  • Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,
    如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行。
    因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe。
    以官方 Qt 5.4.0+MinGW 开发环境为例,
    从开始菜单--》Qt 5.4.0--》5.4--》MinGW 4.9 (32-bit)--》Qt 5.4 for Desktop (MinGW 4.9 32 bit),可以打开 Qt 命令行,从这里就可以执行 windeployqt 工具。

    集成开发环境 QtCreator 目前生成图形界面程序 exe 大致可以分为两类:
    Qt Widgets Application 和 Qt Quick Application。
    下面分别介绍这两类exe 的发布方式。

    1、Qt Widgets Application可执行程序发布方式
    首先用 QtCreator 新建一个 Qt Widgets Application 项目,直接用默认的 QMainWindow 程序就可以了,项目名字假定是 hellomw。
    然后以 Release 方式编译生成 exe 程序:
    0_1447946114836_1.jpg

    生成的程序运行正常之后,找到项目的生成目录,比如 项目源码路径:
    C:\QtPros\hellomw
    它的项目生成目录是
    C:\QtPros\build-hellomw-Desktop_Qt_5_4_0_MinGW_32bit-Release
    进入这个文件夹,在进入它的子文件夹 release 里面,找到 hellomw.exe ,
    将这个exe 复制到一个新的单独的文件夹里用于发布,比如存到
    D:\hellomw\ 文件夹里面。

    然后从开始菜单打开 Qt 命令行,输入命令 :
    cd /d D:\hellomw
    然后使用 windeployqt 工具命令:
    windeployqt hellomw.exe
    0_1447946536412_2.jpg

    然后可以在 D:\hellomw 文件夹里看到 windeployqt 工具自动复制的插件文件夹
    和 dll文件、qm文件。这时候得到的就完整的 exe 程序发布集合,依赖关系都解决好了。
    0_1447946607202_3.jpg

    把 D:\hellomw 文件夹 打包就可以发布了,不用自己一个个找 dll 文件了。
    D:\hellomw 文件夹里的qm文件是多国语言翻译文件,不需要可以删了,
    其他的都保留。

    2、Qt Quick Application发布方式
    首先用 QtCreator 新建一个 Qt Quick Application 项目,直接用默认的项目模版,点击下一步生成项目,项目名字假定是 helloqml。
    然后以 Release 方式编译生成 exe 程序:
    0_1447946658395_4.jpg

    然后找到项目的构建目录,比如项目源码目录 C:\QtPros\helloqml,
    它的构建目录是:
    C:\QtPros\build-helloqml-Desktop_Qt_5_4_0_MinGW_32bit-Release
    进入这个目录,再进入 release 子文件夹,找到 helloqml.exe ,
    复制到一个新的单独的文件夹里面,比如 D:\helloqml\ 文件夹里面。

    然后从开始菜单打开 Qt 命令行,进入D:\helloqml\文件夹:
    cd /d D:\helloqml
    然后使用 windeployqt 工具命令:
    windeployqt helloqml.exe --qmldir C:\Qt\Qt5.4.0\5.4\mingw491_32\qml
    0_1447946715228_5.jpg

    注意不要照抄上条命令,--qmldir 是指出 Qt 库里面的 qml 文件夹位置,
    上面命令里 C:\Qt\Qt5.4.0 是 Qt 官方开发环境安装的文件夹,
    C:\Qt\Qt5.4.0\5.4\mingw491_32 是Qt类库的目录(QTDIR),
    因此使用的 --qmldir 后面写的是 C:\Qt\Qt5.4.0\5.4\mingw491_32\qml
    读者Qt环境安装路径不一样,要根据实际情况修改!

    然后可以看到 D:\helloqml 文件夹里有一大堆文件,就是 QtQuick程序需要的依赖文件。
    将整个 D:\helloqml 文件夹 打包就可以发布出去,在别的电脑上使用。
    0_1447946772235_6.jpg

    这个 D:\helloqml 文件夹里的东西很多,看不懂就不要删,老老实实打包发布就行了。

    上面是最简单的程序发布,实际复杂程序可能还带一些图片文件、数据库文件、配置文件之类的,可以按自己需要添加这些文件到发布文件夹里面。



  • @_Inky 有亮点!!
    此Qt Creator所带的翻译好像是我们的翻译来着……是这样吗?



  • @jiangcaiyang 我是来尝试回复的。不过话说回来,发布Qt也是一个手工活儿啊。



  • 来试试一个看看哦



  • woyaozailayigeshishi



  • @jiangcaiyang 没试过。。。。。。。。。。。。。。



  • @大胖头 拼音出错了 再来一个 你的拼音是 再拉一个


 

最近的回复

  • 大家好!最近应该很好吧。世界杯来了,有没有喝一杯呢?
    我很高兴地告诉大家,我们在上周末的时候完成了Live2D的改造,将我们的看板娘换了哦。原先是蕾姆。
    0_1529471654453_dfe4b40e-ad64-4b7a-9d58-5c48609ea3e2-image.png
    同时我对样式也做了一些微调,比如说这里:
    0_1529471386270_828e7fbb-fe0c-4f6b-bb52-03938ac7e19f-image.png
    看起来稍微好了一些。

    随后论坛进行升级了哦,升级到了最新1.9.2版本了,各种功能应该得到优化了吧。
    最后欢迎大家继续来玩~

    阅读更多
  • Qt for Python终于发布了!
    以前的我,可能接触了一点Python,但是都没有坚持下来,现在Python水平还很弱呢。不过我基本语法还是了解一点的。所以我打算借着Qt for Python的东风,来尝试一下Python的开发。

    1、去Python 官网安装Python。地址是:

    https://www.python.org/downloads/mac-osx
    0_1529422911935_1.png
    我下载的版本是3.6.5

    2、双击pkg安装包进行安装,按照提示安装即可,不必做什么设置。
    0_1529422932496_2.png
    3、安装pip。pip是一个类似npm的快速安装器,非常适合python安装。由于Mac的安全策略,这个时候要输入的命令以sudo开始:

    sudo python get-pip.py

    4、需要安装Qt官网提供的python安装包。Qt的Python安装包并没有放入Pypi的地址,因为Qt库本身就偏大。
    但是依然能够通过pip安装。只是安装的命令稍微长:

    sudo pip install --index-url=https://download.qt.io/official_releases/QtForPython/ pyside2

    然后输出的结果是:
    daxiongtekiMacBook-Air:~ jiangcaiyang$ sudo pip install --index-url=https://download.qt.io/official_releases/QtForPython/ pyside2
    Password:
    The directory '/Users/jiangcaiyang/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    The directory '/Users/jiangcaiyang/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    Looking in indexes: https://download.qt.io/official_releases/QtForPython/
    Collecting pyside2
    Downloading https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-5.11.0-5.11.0-cp27-cp27m-macosx_10_11_intel.whl (125.7MB)
    100% |████████████████████████████████| 125.7MB 1.0MB/s
    matplotlib 1.3.1 requires nose, which is not installed.
    matplotlib 1.3.1 requires tornado, which is not installed.
    Installing collected packages: pyside2
    Successfully installed pyside2-5.11.0
    安装成功。

    5、安装成功了,开始写一个测试的程序吧!
    最简单的,当然是Hello Qt for Python啦。很简单,使用Qt Creator,很方便地可以创建这样的Python脚本,使用方法也和C++版本的Qt应用相同:

    #!/usr/bin/env python # -*- coding: utf-8 -*- from PySide2.QtWidgets import QApplication, QLabel app = QApplication( [ ] ) label = QLabel( "您好 Qt for Python!" ) label.show( ) app.exec_( )

    0_1529422962008_4.jpg
    其中第一行表示用/usr/bin/python 来解析,大家可以在命令提示符输入“which python”来看结果:
    第二行则是在Python 3.x下不用写了,设定的是utf-8编码格式。大家最好也是使用这样的格式,因为这样遇到编码的坑最少。
    因为Python没有main()函数的说法,所以直接从上往下运行就可以了。Python是弱语言,所以不用声明类型,这里还有一点不一样,就是
    app.exec_( ),和C++版本不同的是,添加上了一个下划线。可能和Python内置的函数冲突了?我还需要再调查一下。

    接下来我就仿照例子写了一个更加复杂的Python程序,大致是这样的:

    #!/usr/bin/env python # -*- coding: utf-8 -*- import sys import random from PySide2.QtCore import Qt from PySide2.QtWidgets import (QApplication, QWidget, QPushButton, QLabel, QVBoxLayout ) class MyWidget( QWidget ): def __init__( self ): QWidget.__init__( self ) self.hello = [ "Hallo welt!", "Ciao mondo", "Hei maailma", "Hola mundo", "Hei verden!" ] self.button = QPushButton( "Click me!" ) self.text = QLabel( "Hello World" ) self.text.setAlignment( Qt.AlignCenter ) self.layout = QVBoxLayout( ) self.layout.addWidget( self.text ) self.layout.addWidget( self.button ) self.setLayout( self.layout ) self.button.clicked.connect( self.magic ) def magic( self ): self.text.setText( random.choice( self.hello ) ) if __name__ == "__main__": app = QApplication( sys.argv ) widget = MyWidget( ) widget.resize( 640, 480 ) widget.show( ) sys.exit( app.exec_( ) )

    程序运行起来还行吧!
    0_1529422988117_5.png

    阅读更多
  • @jiangcaiyang 如果需要自动化测试,也用的上

    阅读更多
  • @青山白云 这个可能有点用,但是可能更多局限于爬虫领域吧。

    阅读更多

关注我们

微博
QQ群











召唤伊斯特瓦尔