Qt Creator 插件开发(1):编译 Qt Creator

来源:互联网 发布:劝妓从良知乎 编辑:程序博客网 时间:2024/05/22 01:36

当我们从 http://qt.nokia.com/downloads 下载 QtSDK 时,我们已经获得了最新版本的 Qt Creator 。如果你下载的是 Windows 平台 mingw 版本的 QtSDK,其中包含的 Qt Creator 是使用 MSVC 进行编译的,而 Qt Framework 和 Qt Designer 则使用的是 mingw(这也就是为什么有时候我们的插件能够在 Qt Designer 找到,但在 Qt Creator 却看不到)。因此,如果我们要使用 mingw 版本的 QtSDK 进行 Qt Creator 插件开发,需要自己编译 Qt Creator 。如果未来版本,QtSDK 提供的 Qt Creator 也是 mingw 编译的,那么,我们最好还是自己手动编译一下 Qt Creator 。这样我们就可以获得一个 debug 版本的 Qt Creator ,从而更有利于插件的调试。(这里说明一下,Windows 平台下的 Qt Creator 之所以提供 MSVC 版本的,完全是技术原因。因为 mingw 缺少一些 Qt Creator 所必需的 Windows API。)

在这个页面上,我们可以找到 Qt Creator 源代码的下载链接:http://qt.nokia.com/downloads/qt-creator-source-package。在本文写作时,Qt Creator 最新版本是 2.2.1。我们下载下来一个 zip 压缩包,解压之后,我们在与 Qt Creator 源代码平级的目录中创建一个 build 文件夹,用于放置编译后的文件,以免编译的过程文件同源代码混在一起(build 文件夹必须与 Qt Creator 源代码文件夹平级,这是 qmake 做 shadow build 时的要求)。于是,现在的目录结构如下所示:

QtCreator 目录结构

新版本的 Qt Creator 提供了一个 Qt Quick Designer,用于 Qt Quick 的可视化设计。不过,这个插件需要用到 Qt 的私有头文件。如果你是从 Nokia 直接下载的 QtSDK(就像上文说明的那样)安装,是没有这些私有头文件的。解决的办法是下载 Qt 的源代码(可以在 Qt libraries 这里找到一个 zip 的下载地址)。(这是 Qt Creator 已知的一个 bug,可以在这里找到详细信息。)在下载 Qt 源代码之后,将 {Qt-source-code}\src\corelib\kernel\qwineventnotifier_p.h 复制到 {QtSDK-path}\Desktop\Qt\4.7.3\mingw\include\QtCore\private 这个文件夹下(没有的话请自行创建)。

然后,我们运行“开始菜单\Qt SDK\Desktop\Qt 4.7.3 for Desktop (MinGW)”。此时会启动已经设置好 Qt 环境变量的命令提示符界面。然后使用 cd 命令,进入我们刚刚创建的 build 文件夹。执行命令:

qmake ../qtcreator.pro “QT_PRIVATE_HEADERS=D:/Develop/QtSDK/Desktop/Qt/4.7.3/mingw/include”

其中,D:/Develop/QtSDK/Desktop/Qt/4.7.3/mingw/include 这个路径用于指定 Qt include 文件夹的位置。配置结束后,使用

mingw32-make

开始真正的编译(由于我们使用的是 mingw 版本的 QtSDK,所以使用 mingw32-make。当然,你也可以使用 nmake 使用 MSVC 进行编译。不过前面已经说过,我们这篇文章是基于 mingw 的)。经过一段时间的编译(豆子的笔记本花了大概 75 分钟,硬盘占用 2.5G),如果没有错误的话(豆子在编译时会有找不到 qwineventnotifier_p.h 文件,在执行前面的修复之后即可通过。另外还可能会有一个找不到 ide_version.h 文件。如果出现这个问题,可以将 build\src\plugins\coreplugin 目录中的 ide_version.h,复制到 {qtcreator-2.2.1-src}\src\plugins\coreplugin),我们就会在 build\bin 下面找到 qtcreator.exe 可执行文件。双击运行一下,如果一切正常,那么恭喜你!一个 debug 版本的 Qt Creator 已经编译完成了!(可能会有找不到 dll 的错误,如果出现的话请自行修复路径。启动我们编译的 Qt Creator 会很慢,因为这是 debug 版本的。)

最后强调一点,一定要从源代码编译 Qt Creator ,否则,后面的插件开发的编写和测试工作可能会有许多问题。

QQ空间新浪微博腾讯微博人人网更多1
相关文章
发表评论?

22 条评论。

  1. duguqiusui 

    编译Qt creator出错:
    Qt:Untested windows version 6.2 detected。
    我的系统是win8, 请问是什么原因?谢谢!!!

    回复
    • DevBean 

      看错误提示,应该是因为现在 Qt 还不支持 Windows 8,只好等以后 Qt 支持之后再进行编译。

      回复
      • great 

        应该是QtCreator不支持吧 Qt是支持的

        回复
        • 豆子 

          在那个时候可能还不支持。这条评论发表于2012年10月,不过现在貌似已不可考了 ;-P

          回复
          • great 

            可考 我2012年8月就在Win8上用了Qt5

          • 豆子 

            那这个的确不清楚啦,没准儿是 Qt Creator 不支持 ;-P

  2. duguqiusui 

    我重装了win7,然后编译Qt creator,切换到build目录下,已包含那个头文件,用的代码如下:
    qmake ../qtcreator.pro “QT_PRIVATE_HEADERS=F:\QtSDK\Desktop\Qt\4.8.1\mingw\include”
    然后提示编译出错:
    Cannot find file:..\qtcreator.pro
    请问是怎么回事?谢谢!

    回复
  3. duguqiusui 

    现在又出现了如下错误:
    “qmake”不是内部或外部命令,也不是可运行的程序或批处理文件
    我的Qt是官网下的那种直接安装的,不需要编译的

    回复
  4. duguqiusui 

    我现在弄好了,博主的那个qmake命令应该如下:
    qmake ../qt-creator-2.2.1-src/qtcreator.pro “QT_PRIVATE_HEADERS=D:/Develop/QtSDK/Desktop/Qt/4.7.3/mingw/include”

    回复
    • DevBean 

      按照 Qt Creator 里面的 ReadMe 文件的说明,如果你不需要 QML 插件,就不需要添加 Qt private 头文件。

      回复
  5. duguqiusui 

    谢谢博主,博主能不能做一些关于QML或者是QSS的文章?
    感激不尽!

    回复
    • DevBean 

      会的,因为 QML 已经是 Qt5 的重要组成部分,所以在《Qt 学习之路 2》的章节中肯定会涉及到 QML 的 ;-P

      回复
  6. 米米 

    collect2: ld returned 1 exit status
    mingw32-make[3]: *** [..\..\..\lib\qtcreator\Aggregationd.dll] Error 1
    mingw32-make[3]: Leaving directory `D:/Git/bin/qt-creator/build/src/libs/aggrega
    tion’
    mingw32-make[2]: *** [debug] Error 2
    mingw32-make[2]: Leaving directory `D:/Git/bin/qt-creator/build/src/libs/aggrega
    tion’
    mingw32-make[1]: *** [sub-libs-aggregation-make_default-ordered] Error 2
    mingw32-make[1]: Leaving directory `D:/Git/bin/qt-creator/build/src’
    mingw32-make: *** [sub-src-make_default-ordered] Error 2

    执行中出现上面的错误。。郁闷了

    回复
    • 豆子 

      这个并没有给出错误信息,再向上找找是有错误信息的

      回复
      • 米米 

        D:\Git\bin\qt-creator\build\src\libs\aggregation/../../../../src/libs/aggregatio
        n/aggregate.cpp:217: undefined reference to `_imp___ZN7QObjectD2Ev’
        D:\Git\bin\qt-creator\build\src\libs\aggregation/../../../../src/libs/aggregatio
        n/aggregate.cpp:209: undefined reference to `_imp___Z13qFlagLocationPKc’
        D:\Git\bin\qt-creator\build\src\libs\aggregation/../../../../src/libs/aggregatio
        n/aggregate.cpp:209: undefined reference to `_imp___Z13qFlagLocationPKc’
        D:\Git\bin\qt-creator\build\src\libs\aggregation/../../../../src/libs/aggregatio
        n/aggregate.cpp:209: undefined reference to `_imp___ZN7QObject10disconnectEPKS_P
        KcS1_S3_’ 谢谢豆子老师了。

        回复
        • 豆子 

          不清楚是不是路径的问题?看错误信息应该是在编译 aggregation 时找不到某个库。

          回复
          • 米米 

            噢。我再试试。。这是PRO里的内容。
            include(qtcreator.pri)

            #version check qt
            !minQtVersion(4, 8, 0) {
            message(“Cannot build Qt Creator with Qt version $${QT_VERSION}.”)
            error(“Use at least Qt 4.8.0.”)
            }

            include(doc/doc.pri)

            TEMPLATE = subdirs
            CONFIG += ordered

            SUBDIRS = src share lib/qtcreator/qtcomponents
            unix:!macx:!isEmpty(copydata):SUBDIRS += bin

            OTHER_FILES += dist/copyright_template.txt \
            $$files(dist/changes-*) \
            qtcreator.qbp \
            qbs/pluginspec/pluginspec.qbs

            macx: PLATFORM = “mac”
            else:win32: PLATFORM = “windows”
            else:linux-*: PLATFORM = “linux-$${QT_ARCH}”
            else: PLATFORM = “unknown”

            PATTERN = $${PLATFORM}$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX)

            macx {
            APPBUNDLE = “$$OUT_PWD/bin/Qt Creator.app”
            BINDIST_SOURCE = “$$OUT_PWD/bin/Qt Creator.app”
            BINDIST_INSTALLER_SOURCE = $$BINDIST_SOURCE
            deployqt.commands = $$PWD/scripts/deployqtHelper_mac.sh \”$${APPBUNDLE}\” \”$$[QT_INSTALL_TRANSLATIONS]\” \”$$[QT_INSTALL_PLUGINS]\”
            codesign.commands = codesign -s \”$(SIGNING_IDENTITY)\” $(SIGNING_FLAGS) \”$${APPBUNDLE}\”
            dmg.commands = $$PWD/scripts/makedmg.sh $$OUT_PWD/bin qt-creator-$${PATTERN}.dmg
            dmg.depends = deployqt
            QMAKE_EXTRA_TARGETS += codesign dmg
            } else {
            BINDIST_SOURCE = “$(INSTALL_ROOT)$$QTC_PREFIX”
            BINDIST_INSTALLER_SOURCE = “$$BINDIST_SOURCE/*”
            deployqt.commands = $$PWD/scripts/deployqt.py -i \”$(INSTALL_ROOT)$$QTC_PREFIX\”
            deployqt.depends = install
            win32 {
            deployartifacts.depends = install
            deployartifacts.commands = git clone “git://gitorious.org/qt-creator/binary-artifacts.git”&& xcopy /s /q /y /i “binary-artifacts\\win32″ \”$(INSTALL_ROOT)$$QTC_PREFIX\”&& rmdir /s /q binary-artifacts
            QMAKE_EXTRA_TARGETS += deployartifacts
            }
            }

            INSTALLER_ARCHIVE = $$OUT_PWD/qt-creator-$${PATTERN}-installer-archive.7z

            bindist.depends = deployqt
            bindist.commands = 7z a -mx9 $$OUT_PWD/qt-creator-$${PATTERN}.7z \”$$BINDIST_SOURCE\”
            bindist_installer.depends = deployqt
            bindist_installer.commands = 7z a -mx9 $$OUT_PWD/qt-creator-$${PATTERN}-installer-archive.7z \”$$BINDIST_INSTALLER_SOURCE\”
            installer.depends = bindist_installer
            installer.commands = $$PWD/scripts/packageIfw.py -i \”$(IFW_PATH)\” -v $${QTCREATOR_VERSION} -a \”$$INSTALLER_ARCHIVE\” “qt-creator-$${PATTERN}”

            win32 {
            deployqt.commands ~= s,/,\\\\,g
            bindist.commands ~= s,/,\\\\,g
            bindist_installer.commands ~= s,/,\\\\,g
            installer.commands ~= s,/,\\\\,g
            }

            QMAKE_EXTRA_TARGETS += deployqt bindist bindist_installer installer

            是不是因为我下的sdk不是4.8.0所导致?

          • 豆子 

            它只是要求 Qt 最低版本是 4.8.0,你的是 4.8.1 显然大于这个版本,不存在这个问题。看问题是没有找到 Qt 的库,你的 Qt 路径是否添加正确?

          • 米米 

            我下的好像是4.8.1

          • 米米 

            Qt 路径是否添加正确是指环境变量里配置的路径吗?

          • 米米 

            刚又检查了一遍。突然发现qmake ../qtcreator.pro “QT_PRIVATE_HEADERS=D:/Develop/QtSDK/Desktop/Qt/4.7.3/mingw/include” 这条命令。。我找我了我的SDK目录下没有mingw目录。只有msvc2010这层目录。

          • 豆子 

            你需要把 QT_PRIVATE_HEADERS 修改成你自己的 Qt 路径。因为这里使用的是 mingw,所以是 mingw 版本的 Qt。如果你没有这个目录,只有 vs2010,说明你安装的是 vs2010 版本的 Qt,是不能使用 mingw 编译的。要么重新安装 mingw 版本的 Qt,并且设置好路径,要么使用 vs2010 编译。

原创粉丝点击