【问题标题】:How do I reconfigure Qt to detect a newly installed library?如何重新配置​​ Qt 以检测新安装的库?
【发布时间】:2016-08-31 18:34:26
【问题描述】:

问题重新配置 Qt 究竟意味着什么?安装库后我该怎么做?

背景: 当我学习在 Qt 中开发应用程序时,我不断遇到几个不同库的类似问题,所以我问了一个更普遍的问题,因为我认为这里有一个我不理解的模式。但是,我提供了一个特定的示例:

我想在我的应用程序中使用 USB 摄像头视图。我的 qml 文件中有import QtMultimedia 5.0,并基于 Qt-Creator 示例创建了一个相机小部件。当我去运行应用程序时,我在应用程序输出中看到以下错误:

[WARN | default] defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.camera" [:0] [WARN | default] defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer" [:0] 并且相机视图不起作用(黑屏)。当我用谷歌搜索这个错误时,我看到很多线程建议安装一个库,然后重新配置 Qt,例如 this bug report 中所建议的。

我有两台不同的开发机器,一台装有 Qt 和 Qt Creator 的二进制安装,另一台我从源代码构建 Qt。

【问题讨论】:

    标签: qt qml qmake qtmultimedia


    【解决方案1】:

    重新配置 Qt 意味着重新构建 Qt,因为配置是构建 Qt 的第一步。

    Qt 的设计目的是让您可以(并且通常会!)在同一台机器上并行安装多个版本,在不同的安装文件夹中。它们都将从相同的来源构建。例如。 (在 Unix 上),在您大概安装了 gstreamer 的开发包之后,您必须按如下方式构建:

    cd ~
    mkdir Qt
    wget https://download.qt.io/official_releases/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.tar.xz
    tar -xf qt-everywhere-opensource-src-5.7.0.tar.xz
    

    每个配置都构建在自己的一组构建/安装文件夹中:

    mkdir 5.7.0-shared-build
    mkdir 5.7.0-shared
    cd 5.7.0-shared-build
    ../qt-everywhere-opensource-src-5.7.0/configure -prefix ../5.7.0-shared \
      -opensource -confirm-license -debug-and-release -gstreamer
    gmake -j8 && gmake -j8 install && echo OK
    cd ..
    
    mkdir 5.7.0-static-build
    mkdir 5.7.0-static
    cd 5.7.0-static-build
    ../qt-everywhere-opensource-src-5.7.0/configure -prefix ../5.7.0-static \
      -opensource -confirm-license -debug-and-release -static -gstreamer
    gmake -j8 && gmake -j8 install && echo OK
    cd ..
    

    gmake 的 -j 参数的值应设置为您机器上的逻辑 CPU 内核数。

    【讨论】:

    • 感谢您的回复,这样就更清楚了。从二进制安装时重新配置qt是否意味着卸载并重新安装它?
    • @Aras 无需卸载任何东西。从二进制文件安装的 Qt 将保留,您在构建特定项目时根本不会使用它。并且重新安装没有任何意义:您必须构建它,而不仅仅是第二次安装二进制文件。任何时候同时存在多个 Qt 安装是完全正常的。我有时有十几个版本。当我用完空间时,我通常会删除过时的:)
    • 好的,我明白了。我认为上面的代码中有错字。你的意思是qmake 不是gmake 对吧?
    • 不,我的意思是gmake。或者只是 make 如果您的品牌是 gnu 品牌。在构建 Qt 时,您不必手动调用 qmake
    • 大声笑!我明白了,我猜这将是鸡和蛋的问题;)。我的 ubuntu 系统上没有gmake,所以我只使用make。感谢您的帮助!
    【解决方案2】:

    听起来好像您需要一个用于网络摄像头和媒体播放器的 Qt 插件。 Qt 应用程序找不到这些插件(注意,它们是专门为与 Qt 和特定版本的 Qt 一起使用而编译的)。

    在 QT C++ 中,我会使用函数 QCoreApplication::addLibraryPath(const QString&),记录在这里: http://doc.qt.io/qt-5/qcoreapplication.html#addLibraryPath

    我不会将上述内容称为“答案”,但更像是这些线索可以帮助您搜索所需的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多