問題タブ [qproperty]

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 投票する
1 に答える
2495 参照

qt - QString の NOTIFY アイテムで Q_PROPERTY を使用する

ウィジェットベースのクラスがあります。プライベートQStringメンバーが 2 つあります。値が変更されたときにシグナルを使用して通知できるようにしたいと考えています。したがって、両方の変数に対して、セッターとゲッターがあります。私も信号機を持っています。

  • 質問: 両方とも同じ信号を使用できますか? または、2 つの独立した信号を定義する必要がありますか?

次に、そのシグナルを同じクラスのスロットにバインドしたいと思います(シグナルを発行する代わりにスロットを呼び出すことができることはわかっていますが、シグナルを使用したいです)。

  • それらを接続するにはどうすればよいですか?私は試した:

    /li>

invoiceFilterDirectionPartしかし、それはQStringコンパイルされません-connect最初の引数がQObject*

connectステートメントで使用できますthisが、単一の信号に関する限り、両方のスロットがトリガーされると思いますか? オプション2つの独立したシグナルのみがステートメントで使用thisされていconnectます-または何かが欠けていますか?

  • 最後の質問:Q_PROPERTYこの作業をすべて行うには が必要ですか? 私が最初にそれを使用したとき、それはある種の魔法のマクロであると思います-私がそれを使用したとき、次のように:

    /li>

変数、セッター、ゲッター、および通知シグナルを自動的に生成すると思いました。悲しいことに-それは起こりませんでした;)。言及されたアイテムが存在しないと叫んだだけです。それだけですか?良い使用例がなかなか見つからない…

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

qt - Q_Property をオーバーライドするには?

次のクラスを検討してください。

プロパティ値にアクセスすると、クラス B のメソッドではなく、クラス A のメソッドが直接呼び出されます。

これまでのところ、この明らかな制限を回避するために、プロパティ コードを複製し、各クラスからのシグナルを接続しました。

これが最善の解決策ですか?

(同じ名前のプロパティが原因で) 潜在的な問題が発生することはありますか?

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

c++ - プロパティ char * name から異なる Q_PROPERTY タイプの notifySignal を void スロット(QVariant) に接続するジェネリック メソッドを構築する方法は?

私は2つのパラメータを持つメソッドを書き込もうとしています. name Q_PROPERTY( char *) とQObject *関連する. 信号のシグネチャは、パラメータのタイプによって異なります。Q_PROPERTYvoid slot(QVariant)void method(QVariant)

Qt 5でそれを達成するにはどうすればよいですか? 無理かもしれませんが、わからないうちは探すのをやめません。

だから私は3つの解決策があると思います:

  • シグナル名からシグナルの正確なシグネチャのスロットを動的に構築し、古い Qt 接続方法を使用して、その中でメソッド (QVariant) を呼び出します。

    /li>
  • 新しい Qt 5 接続システムを使用:

    /li>
  • QVariant で使用できるすべてのスロット シグネチャを構築します。

ただし、最初のソリューションで指定されたメソッドを呼び出すスロットを動的に構築する方法はわかりません。QMetaMethod2 番目の解決策として、notifySignalから関数ポインタを取得する方法がわかりません。おそらく最後の解決策が最良の方法であり、簡単に達成できますが、少し極端です。

あなたはそれについてどう思いますか?

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

qt - QObjectポインタのプロパティをQMLに公開する方法

私の問題を示すために、クラスの非常に簡単な(そして部分的な)説明をしています。基本的に、2 つのプロパティをセットアップしました。

私のQMLでは、priceプロパティにアクセスするとうまく機能します。fruitしかし、明らかに返されるプロパティにアクセスしてFruitからそのプロパティを使用しようとすると、うまくいきpriceません。これはこのように機能するはずではありませんか?

2番目のものはFruitどちらもプロパティであり、プロパティを持っていpriceますが、そのプロパティにアクセスしていないようです? これは機能するはずですか?

更新しました

ソースコードを含めています。で新しいデモを作成しましたがHardwareComponent、この方法の方が理にかなっています。受け取った回答に基づいて機能させようとしましたが、うまくいきませんでした。

HardwareComponentclass は と の基本クラスComputerですCPU

main.cpp

main.qml

これは、すべてのプロジェクト ファイルの完全なソース コードです。

実行すると、次の出力が得られます。

C:\Users\User\Documents\My Qt Projects\build-hardware-Desktop_Qt_5_4_0_MSVC2010_OpenGL_32bit-Debug\debug\hardware.exe を起動しています... QML デバッグが有効になっています。安全な環境でのみ使用してください。qrc:/MainForm.ui.qml:20: ReferenceError: コンピューターが定義されていません

20 行目 (computer.price) で警告が表示されますが、それでも機能し、コンピュータの価格 (=500) が表示されます。変更するcomputer.cpu.priceと、同じ警告が報告されますが、価格が表示されなくなります - 機能していないようです。

問題は、価格が仮想プロパティであるため、機能することです! しかし、このプロパティをコンピュータ コンポーネント内の別のハードウェア コンポーネントで使用すると、機能しません! Mido によって投稿されたコード/回答は、これに対する解決策があることを願っています。かなり近いようです! 私はこれがうまくいくことを願っています。

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

c++ - Qtilities: プロパティ ブラウザのカスタム プロパティ タイプは?

ユーザーが特定のオブジェクトのデータを非常に柔軟に操作する必要があるプログラムを作成しています。私はある種のプロパティ ブラウザを使用することにしました。Qtilities」ObjectDynamicPropertyBrowserが目に留まりました。

ただし、独自のデータ型を追加できる必要があります。ドキュメントには、その方法が明確ではありません。

自分のデータ型を Qtilities のプロパティ ブラウザ ウィジェットで表示するにはどうすればよいですか?

また、私のニーズについての詳細:

  • データ型は Qt の一部ではなく、s でもありませんQ_OBJECT
  • 関連するクラスへの Qt 固有の変更はオプションではありません。
  • 関連するクラスを経由で宣言してQ_DECLARE_METATYPEも問題ありません。
  • 特に、ベクトル型と行列型を表す必要があります (後でさらに追加される可能性があります)。
0 投票する
1 に答える
952 参照

c++ - qt-solutions QtPropertyBrowser: 不完全型へのメンバー アクセス

qtpropertybrowserの一部であるをコンパイルしようとしていますqt-solutions。私はそれをプロジェクトの一部として含めていSUBDIRSますsubdirs。Qt Creator を介してを実行qmakeし、結果の を実行したところ、ファイルからの次のエラーが表示されました。buildlib/buildlib.proMakefilemoc

完全なログは次のとおりです。

qmake呼び出しは次のとおりです。

そして、これは私が書いていないコードです! コンパイルして使用できるように、この問題を解決するにはどうすればよいqtpropertybrowserですか?

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

qt - シグナルまたは Q_PROPERTY を使用して QML オブジェクトを更新する

サーバーから非常に頻繁にデータを受信して​​います。このデータは主に数字で構成されています。それらのそれぞれは、更新が必要な QML オブジェクトに対応しています。

ファイルからオブジェクトQ_PROPERTYsignals更新するための最善の方法は何ですか?QMLC++

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

qt - Q_PROPERTY エラーのユーザー タイプ 'staticMetaObject' は 'blah' のメンバーではありません

enum名前空間のように定義されたいくつかのデータ型があります。

を使用したかったQ_PROPERTYのですが、それはデータ型を返します...

しかし、私はエラーが発生します:

したがって、独自の型を作成し、それらを に記載されている関数で使用する場合、それらはマクロを継承および宣言するQ_PROPERTYクラス内にある必要があります。それは多くのオーバーヘッドではありませんか?QObjectQ_OBJECT

代替手段はありますか?

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

c++ - QObject から継承したオブジェクトから継承したクラスの Q_Properties へのアクセス

QObjectから継承するクラスの継承されたクラスのQ_Propertiesにアクセスしようとしている次の単純化されたセットアップがあります。基本クラスのプロパティには問題なくアクセスできますが、(デバッグ中に) 継承されたクラスのプロパティを見つけたり、表示したりできません。

基本クラス:

継承クラス:

ジェネリック メソッドからの次のスニペットは、渡されたリストで見つかったオブジェクトのプロパティにアクセスします。

私の出力が「モデル:トヨタ」のようになり、容量が含まれないことを除いて、それは正常に機能します。

サブクラスのプロパティを取得できた唯一の方法は、仮想の get および set メソッドと追加の Q_property を基本クラスに追加することです。基本クラスにアクセスできません。