qmlプラグインプロジェクトでは下記コードのように
QQmlExtensionPluginクラスのサブクラス内にある
registerTypesメソッドの中でqmlRegisterType関数を
使えばQObjectベースのC++クラスをQMLエレメント化
することができるのはわかるのですが
そのプラグイン内でしか使わない内部処理を行うクラスを
この方法でQMLエレメント化した場合
当プラグインを利用する他のプロジェクトからその
内部処理用のエレメントを使用できてしまいます。
内部処理用のエレメントをプラグイン利用者が使用できない
ようにするにはどうすればよいのでしょうか。
ご回答よろしくお願いします。
c++
1#pragma once 2#include <QQmlExtensionPlugin> 3 4class Plugin 5: public QQmlExtensionPlugin 6{ 7 Q_OBJECT 8 Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) 9 10public: 11 void registerTypes(const char *uri) override 12 { 13 qmlRegisterType<qmlエレメント化したいクラス>(uri, メジャーバージョン, マイナーバージョン, "エレメント名"); 14 } 15};
質問の背景
私は現在アナログ時計プラグインを用いたGUIアプリ(github)の作成を行っており
その中のanalog clock/plugins/analog_clockフォルダが
アナログ時計のプラグイン側となっています
プラグイン側のsrc/clock_backend.cppと
include/clock_backend.hppに書いてある
現在時刻を取得するためのclock_component::ClockBackendクラスを
プラグイン側のsrc/plugin.cpp内で
上記方法を用いてClockBackendエレメント化して、それを
プラグイン側のqml/AnalogClock.qml内で利用しているのですが
そのClockBackendエレメントが
プラグインを使用する側であるメインウィンドウを記載している
qml/main.qmlからでも使用できてしまいます
アナログ時計の内部処理であるClockBackendエレメントが
main.qmlからでもアクセスできてしまうのはまずいと思うので
使用できないようにしたいのですが
どうすればできるのかわからず
詰まってしまっているので御質問させていただきました。
開発環境の備考
ソフトウェア名 | 種類 | バージョン | 備考 |
---|---|---|---|
Windows10 HOME | OS | 20H2 | 特になし |
GNU G++ | C++用コンパイラ | 8.1.0 | Qt(oss版) オンラインインストーラよりインストール |
Ninja | ビルドツール | 1.10.0 | Qt(oss版) オンラインインストーラよりインストール |
CMake | メタビルドツール | 3.19.2 | Qt(oss版) オンラインインストーラよりインストール |
Qt | ライブラリ | 5.15.2 | Qt(oss版) オンラインインストーラよりインストール |
あなたの回答
tips
プレビュー