如何在 Qt Creator 中解决“找不到 QML 模块”
Posted
技术标签:
【中文标题】如何在 Qt Creator 中解决“找不到 QML 模块”【英文标题】:How can I resolve “QML module not found” within Qt Creator 【发布时间】:2021-04-05 17:07:13 【问题描述】:这个问题与未回答的“通过 Gstreamer qmlglsink 插件在 Qml 中显示视频”问题有关,因为我有同样的问题。
问题是 Qt Creator 找不到解析导入“org.freedesktop.gstreamer.GLVideoItem 1.0”语句所需的任何文件。
当我创建一个新的 QML 项目并添加导入“org.freedesktop.gstreamer.GLVideoItem 1.0”行时。我得到这个错误。该项目编译并运行良好。
我有另一个项目来自我下载的示例。它在其 qml 文件中使用 GstGLVideoItem。它也给出了同样的错误,它也编译和运行良好。它可以毫无问题地从文件中播放 Big Buck Bunny 视频。
我已经完全重建了我的计算机,试图解决这个问题。按照 GStreamer 网站上的说明,使用在线安装程序和 GStreamer 1.18.0 将 Qt 5.15.2 重新安装到 Ubuntu 20.10 PC 中。 Qt 和 GStreamer 都按预期工作。我已经能够毫无问题地构建和运行任何所需的 Qt 示例。我还能够使用 C 和 gst-launch-1.0 编译和运行任何 GStreamer 教程以及我自己的自定义管道。
当我将两者放在一起并尝试在 QML 中显示 GStreamer 视频时,Qt Creator 中会出现此问题。
我是 Linux、Qt、GStreamer、qmake、cmake 的新手……我该如何调试?导入语句要查找什么样的文件?它是 .qml 文件还是其他类型的文件?如何找到文件的确切名称以查看它是否存在?
这是显示视频的项目的 .pro 文件的内容。我已经尝试了我能在网上找到的大部分方法来解决这个问题,但没有任何乐趣。
TEMPLATE = app
QT += qml quick widgets
CONFIG += qml_debug
QT_CONFIG -= no-pkg-config
CONFIG += link_pkgconfig debug
PKGCONFIG += \
gstreamer-1.0 \
gstreamer-sdp-1.0 \
gstreamer-gl-prototypes-1.0 \
gstreamer-gl-1.0 \
gstreamer-gl-egl-1.0 \
gstreamer-app-1.0 \
gstreamer-net-1.0 \
gstreamer-video-1.0 \
gstreamer-controller-1.0 \
gstreamer-rtsp-1.0 \
gstreamer-plugins-base-1.0 \
gstreamer-pbutils-1.0 \
gstreamer-check-1.0 \
gstreamer-allocators-1.0 \
gstreamer-rtp-1.0 \
gstreamer-riff-1.0 \
gstreamer-tag-1.0 \
gstreamer-audio-1.0 \
gstreamer-gl-x11-1.0 \
gstreamer-fft-1.0 \
gstreamer-base-1.0
CONFIG += c++17
INCLUDEPATH += /usr/include/gstreamer-1.0/
INCLUDEPATH += /usr/include/glib-2.0/
INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include/
DEFINES += GST_USE_UNSTABLE_API
INCLUDEPATH += ../lib
SOURCES += main.cpp \
qmlplayer.cpp \
setplaying.cpp
RESOURCES += qmlsink.qrc
QML_IMPORT_PATH += /usr/lib/x86_64-linux-gnu/gstreamer-1.0
QML_IMPORT_PATH += /usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0
QML_IMPORT_PATH += /lib/x86_64-linux-gnu/gstreamer-1.0
HEADERS += \
qmlplayer.h \
setplaying.h
【问题讨论】:
QtCreator 是什么版本? 【参考方案1】:GStreamer 论坛上的 Matthew Waters 已经回答了这个问题。
我在下面引用他的话。
啊,所以你的问题是使用 Qt 设计器没有显示找到 相关的qml代码。 qmlglsink 目前不支持该用例。
问题是必要的 QML 项目包含在 qmlglsink 元素本身并在元素时动态注册 本身是实例化的。 Qt 设计师什么都不知道 GStreamer 因此无法为您执行此初始化。没有 qmlglsink 的 qmldir 或 qmltype 文件。
“修复”涉及到相当复杂的 qmlglsink 重组 支持将 qml 部分/插件放置在单独的 .so 中的元素 可使用 Qt 工具(使用 qmldir 或其他工具)找到。
【讨论】:
【参考方案2】:您可能必须在将 qml 加载到 main 之前动态注册模块,如下所示。
qmlRegisterType<QtGLVideoItem> ("org.freedesktop.gstreamer.GLVideoItem", 1, 0, "GstGLVideoItem");
您必须创建继承 QtQuickItem 类的 QtGLVideoItem 对象,请参见下文。
#include <QQuickItem>
class QtGLVideoItem : public QQuickItem
Q_OBJECT
public:
QtGLVideoItem();
~QtGLVideoItem();
protected:
private:
;
【讨论】:
以上是关于如何在 Qt Creator 中解决“找不到 QML 模块”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 qt creator 中将 QString 转换为 int