質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

908閲覧

自作QMLプラグインの内部処理用C++製QMLエレメントをプラグイン利用者から隠したい

退会済みユーザー

退会済みユーザー

総合スコア0

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/05/08 12:49

編集2021/05/08 17:08

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 HOMEOS20H2特になし
GNU G++C++用コンパイラ8.1.0Qt(oss版) オンラインインストーラよりインストール
Ninjaビルドツール1.10.0Qt(oss版) オンラインインストーラよりインストール
CMakeメタビルドツール3.19.2Qt(oss版) オンラインインストーラよりインストール
Qtライブラリ5.15.2Qt(oss版) オンラインインストーラよりインストール

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/09 05:57

yumetodoさん 返信してくださりありがとうございます。 実をいうとyumetodoさんに回答依頼を 出してしまったのは私の誤操作が原因です。 回答依頼の取り消し方については調べてみたのですが 見つけられなかったので返信があり次第 この旨を伝えようと思っておりました。 しかしd-pointerというテクニックは初耳でしたので 書き込んでくださったurl先は この質問を解決するカギになるかもしれないので じっくり読んでいこうと思います。 お手数おかけして申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問