【发布时间】:2016-06-17 20:32:40
【问题描述】:
我正在尝试使用cmake(而不是使用QtCreator)创建一个C++ qml 插件。这是一个模仿我的插件设置的虚拟项目:
./CMakeLists.txt
project(circle_plugin)
find_package(Qt5 COMPONENTS Core Qml Quick REQUIRED)
set(HEADERS
include/Circle.hpp
include/Plugin.hpp
)
add_library(circle_plugin STATIC ${HEADERS})
set_target_properties(circle_plugin PROPERTIES AUTOMOC ON)
target_link_libraries(circle_plugin PUBLIC Qt5::Core Qt5::Qml Qt5::Quick)
target_include_directories(circle_plugin PUBLIC include)
./include/Circle.hpp
#pragma once
#include <QObject>
namespace test {
class Circle: public QQuickItem {
Q_OBJECT
public:
Circle(QQuickItem* parent = nullptr);
virtual ~Circle() = default;
};
} // namespace test
./include/Plugin.hpp
#pragma once
#include <QObject>
namespace test {
class CirclePlugin : public QQmlExtensionPlugin {
Q_OBJECT
Q_PLUGIN_METADATA(IID "com.test.CirclePlugin")
public:
CirclePlugin();
~CirclePlugin();
void registerTypes(const char *uri) {
Q_ASSERT(uri == QLatin1String("CirclePlugin"));
qmlRegisterType<Circle>(uri, 1, 0, "Circle");
}
};
} // namespace test
./qml/View.qml
import QtQuick 2.2
import CirclePlugin 1.0
Item {
Circle {
}
}
我正在从我的主应用程序链接到 circle_plugin。每当我在主应用程序的 qml 文件中 import CirclePlugin 1.0 时,我都会收到消息 module "Circle" is not installed。
我找到了有关该主题的以下指南,但我仍然不确定如何让它发挥作用。
【问题讨论】:
-
qml 源码在哪里?它是否包括适当的包含?
-
我会用 qml 更新。
-
好的,我看到qml文件没问题。此外,您必须将扩展库放在正确的路径上。 $QT_INSTALL_QML/Circle 或 imports/Circle
-
抱歉,您的意思是在我的 CMakeLists.txt 文件中,我需要在某处显式安装插件吗? cmake 不应该自动处理吗?
-
我真的不知道如何使用 Cmake 设置安装过程。至于我,我用 qmake 来做。您可以在帖子中的链接中的 .pro 文件中看到该示例