問題タブ [qvariant]
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.
c++ - QSettings からカスタム メタタイプの配列を読み取る
QSetting からのカスタム メタタイプ データの読み取りに問題があります。私はクラスを持っています:
過負荷で:
プログラムの最初のどこかで、次のように呼び出します。
読み取りと書き込みには、2 つの関数を使用します。保存は正常に機能し、保存したすべてのデータは設定ファイルに表示されます。
この関数の問題です。ロード カウントは正しく行われますが、空のデフォルトの構築済みアイテムがロードされます。
テスト用に新しいプロジェクトに書き直しましたが、正常に動作します。この亜種がデータを正しく読み取っているのに、最初の亜種がそうではない理由を調べるのに 2 時間を費やしました。最初のバリアントの所有者が正しく変換されます。両方のバリアントの設定ファイルのデータも同じです。
このバリアントで QSettings との違いを見つけることができるでしょうか?
c++ - QSettings から派生し、QIcon を保存します
次のように QSettings から派生したクラスを使用して QIcon を保存しようとしました。
setValue("fancy_icon", QIcon::fromTheme("document-new"));
しかし、私はエラーがあります:
QVariant::save: タイプ 69 を保存できません。
そして、それは機能しません。驚いたことに、QSettings インスタンスを構築して 69 の type(QIcon) 要素のいずれかを保存すると、正常に動作します。
問題は、なぜ今それが機能するのかということです。どうすればもっとうまくできますか?
c++ - QIcon/QPixmap/QImage への QVariant
QTreeWidget の列の 1 つに格納した QIcon を Qt::DecorationRole として抽出したいと考えています。
ただし、データは QVariant としてしか取得できず、QVariant から QIcon に変換する関数が見つかりませんでした。それは可能ですか?
c++ - 順序付けられていないデータから QVariant リストを作成する
私はこのデータセットを持っています:
次のように、QVariant に変換したいと思います。
私はそれが次のようであるべきだと考えました:
しかし、配列の場合、データを順序付けする必要があります。つまり、ステップ 1 と 3 のparams["steps"]
前にステップ 0 を挿入する必要があります (ステップ 2 は空にする必要があります)。
また、入力データのソートはオプションではありません。
私は次のコードでこれを実装しようとしました:
しかし、次の行に遭遇すると、コードはある時点で範囲外のインデックスで失敗します。
したがって、「空のマップで埋める」ループが何らかの形で失敗したと思います。ここはどうすればいいですか?
qt - qhash のキーとしての qvariant
QVariants キーを持つデータ構造を作成したいと考えています。次のようになります。
残念ながら、「'qHash(const QVariant&)' の呼び出しに一致する関数はありません」。
そこで、QVariants の qHash の独自の実装を定義しました。
しかし、コンパイラは、メソッドが複数回定義されていると言います。
では、QVariant を QHash のキーとして使用するにはどうすればよいでしょうか? または:私は何を間違っていますか?
c++ - dynamicCall で VARIANT* を使用するには?
COM オブジェクトを使用しようとしていますが、パラメーター タイプ VARIANT* に問題があります。COM オブジェクトの関数は、この型のパラメーターを持っている場合を除いて、問題なく使用できます。
generateDocumentation によって生成されるドキュメントは次のとおりです。
QVariantList パラメータ = ...
object->dynamicCall("GetRanges(int,int,int&, QVariant&)", params);
COM オブジェクトで提供されるドキュメントによると、パラメーターは LONG、LONG、LONG*、および VARIANT* 型である必要があり、VARIANT* は BSTR の配列を含む VARIANT へのポインターであることが正確です。
通常、3 番目と 4 番目のパラメーター (LONG* および VARIANT* 型) を取得できるはずですが、それらの値は関数によって使用されません。
これが私のコードです( a と b は以前に初期化された int です):
そのコードでは、 QAxBase: Error calling IDispatch member GetRanges: Unknown errorというエラーだけが表示されますが、これはあまり役に立ちません。
私はいくつかのことを変更しようとしましたが、このコードを使用して(一種の)進行することができました:
エラーは解消され、最後に i の値は正しいのですが、sl はまだ空のままです。正しく動作する C# のサンプル デモがあるので、そうすべきではないことはわかっています。
誰かがそれを機能させる方法についてアイデアを持っているなら...
それ以外の場合は、少し調べてみると、インターフェースを照会して直接使用することも可能であることがわかりましたが、あまり理解できず、問題が解決するかどうかわかりません。
私は Windows7 64 ビット プラットフォームを使用しており、コンパイラとして msvc2012 を使用しています。現在 Qt 5.1.0 を使用していますが、5.0.2 でも動作しませんでした。
c++ - QList である QVariant を反復処理する?
QObject の動的プロパティを使用して、そのプロパティにアクセスできるスロットで使用される情報を保存しています。送信者は次の QState です。myQState->setProperty("key", QList<int>(0, 1, 2));
格納されたQVariantを QListに変換して、反復できるようにしたいと思います。次のコードは機能しません (エラー C2440: {[T=int] を使用して QVariant を QList に変換できません):
このコードは機能します。プロパティとして設定するオブジェクト:
そしてスロットで
c++ - QDataStream による QVariant のシリアル化
間違って書いている可能性がありますが、実行しようとしているコードは次のとおりで、期待どおりに動作しません。
QVariant クラスのドキュメントの例を考えると:
http://qt-project.org/doc/qt-5.1/qtcore/qvariant.html#type
値 123 を QByteArray に正しくシリアル化する必要がありますが、そうしません。代わりに、次のように書き出すだけです。
誰でもこれを修正する方法を知っていますか?
編集
まあ、それは明確ではなかったかもしれませんが、元の問題は次のとおりです。
QStringList 、 QString 、 double 、 int などの QVariant に格納されている QVariant 組み込み型がある可能性があります....
私が欲しいのは、QVariant を文字列にシリアル化し、型ごとに自分で行う必要なく復元する方法です。私が知る限り、QVariant::toString() メソッドは、QVariant を介して受け入れられるすべての型で機能するわけではありません。QDataStream を渡すと、QVariant のシリアル化されたバージョンを渡すことができると考えていました。
編集2
piotruś さんの回答のおかげで、私の問題に答えることができました。プログラムは次のとおりです。