問題タブ [qmetaobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
4638 参照

qt - クラス名からQtメタオブジェクトインスタンスを見つけるにはどうすればよいですか?

クラス名を指定して、クラスの QMetaObject インスタンスを見つける方法はありますか? 私がやりたいことは、ディスクからオブジェクトをロードすることですが、これを行うには、QMetaObject を使用してインスタンスを作成するために、クラスの名前を使用して QMetaObject インスタンスを取得する方法が必要です。

0 投票する
2 に答える
1693 参照

c++ - 呼び出す一致する関数がありません - コンパイラは、呼び出しが (QObject *) の場合に (QObject *&) を呼び出すと言います

これはコードです:

これはエラーです:

私は何が欠けていますか?ポインターを使用して呼び出しますinvokeMethod()が、コンパイラーはそれがポインター参照であると不平を言います。

0 投票する
1 に答える
405 参照

qt - QObject派生クラスインスタンスでOOP基本概念に従うにはどうすればよいですか?

こんにちは... 私は Qt を長い間使用していませんが、最近、ある考えが頭に浮かびました。 QObjectpublic 関数と、子オブジェクトへのポインターchildren()を返す他のいくつかの関数があります。そのため、カスタム クラスのクライアントはカプセル化を破ることができます。

  1. このような野蛮な扱いからコードを保護するにはどうすればよいでしょうか?

  2. Qt 開発者がそのような機能をパブリック セクションに残したのはなぜですか? 彼らはどのような目的を達成しようとしましたか?

私が想像できるそのような関数に関する唯一の引数は、Qt の「ガベージ コレクション」に関連するものです (1 つの親QObject派生クラス インスタンスを削除すると、すべての子インスタンスが自動的に削除されます)。しかし、Qt のシステムでそれを行うことができると思いますmetaObject(メカニズムについてはわかりませんが、子オブジェクトへのアクセスは公開すべきではない、と私は考えています)。

  1. また、誰かが別のスレッドで子オブジェクトを使用しようとする状況を考慮してください。これは Qt では禁止されていますが、使用に照らして制限は見られませんQObject::children()

//------------------------------------------------ ------------------------------------------------

いくつかのコメントによる詳細な説明:

QObject::children()クラスのプライベートメンバーにアクセスできますが、たとえば

メンバー m_lbl1 をプライベート メンバーとして宣言する必要はありません。

そしてそれは非常に悪いです。ソリューションに少なくとも 10^5 行のコードがあり、1 人以上の開発者がいる場合、遅かれ早かれ誰かが の子メンバーの状態を手動で変更MyClassでき、あらゆる種類のバグ (たとえば、MyClass実装へ)。

@ Merlin069: pImpl は Qt の開発における一般的なアプローチですか?

0 投票する
1 に答える
195 参照

c++ - Qt C++でQMLプロパティを列挙しますか?

私のQt組み込みアプリでQMLをレンダリングするために次のことをしています:

ルート項目で定義されているすべてのプロパティ値を列挙する方法はありますか?

たとえば、QML がある場合:

これらの文字列のリストを持つことになるQtメソッドはありますか:

次のことを試しましたが、リストが空です:

前もって感謝します!

0 投票する
1 に答える
720 参照

c++ - QMetaProperty によるイントロスペクション

クラスがありますObjectA

そしてクラスObjectB

そして、私はこのようなシグナル/スロット接続をしたいと思います

名前のプロパティしか知りません。

しかし

metaPropertyA.notifySignal().methodSignature()

関数のポインターを返さず、set メソッドのポインターを取得する方法もわかりません。

0 投票する
1 に答える
287 参照

c++ - Q_PROPERTY WRITE インデックスを取得

私はこのプロパティを持っています:

物件の名前しか知りません_a。メソッドのインデックスを取得したいと思いますsetA

0 投票する
3 に答える
1912 参照

qt - コンパイラ エラー C2248: 'QObject::Qobject': クラス 'QObject' で宣言されたプライベート メンバーにアクセスできません

こんにちは皆さん、私はfooクラスを持っています

foo.h のコード

これで問題なく動作し、コンパイルできますが、QSettings を使用してこのカスタム C++ クラスを保存したいのですが、ステップの 1 つはクラスを登録することですQ_DECLARE_METATYPE

したがって、この行 Q_DECLARE_METATYPE(Foo) を foo.h ファイルの最後に配置するとすぐに、これらのコンパイラ エラーが発生します C2248:'QObject::Qobject':cannot access private member defined in class 'QObject' をクリックすると、私のconnection.hヘッダーファイルの最後の行で、何が間違っているかについての他の情報を提供しません。つまり、エラーは私を指摘します

QObject をコピーできないことは知っていますが、これはそれに関連していますが、ここで何が間違っているのか、どうすれば修正できるのかわかりません。前もって感謝します

0 投票する
0 に答える
283 参照

qt - QSettings を使用して QObject クラスをシリアル化しようとすると、読み取りアクセス違反が発生する

こんにちは、QObject から継承された foo クラスがあり、QSettings を使用してシリアライズしたいと考えています。foo.h のコード

Foo.cpp のコード

main.cpp のコード

これで問題なくコンパイルできますが、デバッグすると、Exception Triggered read access violation が発生します

注意すべき重要なことの1つは、友​​達の機能を

var1、var2、および var3 で正しい値を取得します。

誰かが私が間違っていることと、どうすればそれを修正できるか教えてもらえますか よろしくお願いします

0 投票する
1 に答える
1091 参照

c++ - Qt metaObject->indexOfMethod は常に -1 を返します

Fooクラスで宣言された関数が 1 つあります。

Q_INVOKABLE void setImageUrl(const QString &imageUrl);

ただし、そのメソッドの関数インデックスを取得できません。

私は何が欠けていますか?