問題タブ [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++ - Qt5でQt::PenStyleを宣言するには?
プロジェクトを Qt 4.x から 5 に移行しています。次の属性を含むクラスがあります。
およびそれぞれの get 関数:
私はそれを言ってコンパイルエラーが発生します
いくつかの調査を行ったところ、次のことがわかりました。
QVariant:
*Qt::GlobalColor を受け取り、QVariant(QColor) インスタンスを生成する一貫性のないコンストラクターが削除されました。このようなバリアントを構築するコードは、QColor コンストラクターを明示的に呼び出すことで移行できます。たとえば、「QVariant(Qt::red)」から「QVariant(QColor(Qt::red))」*同様に、列挙値 Qt::BrushStyle、Qt::PenStyle、および Qt::CursorShape からの QVariants の暗黙的な作成は削除されました。オブジェクトを明示的に作成するか、static_cast(Qt::SolidLine) を使用して、列挙型と同じ値を持つ int 型の QVariant を作成します。
問題は、そのように Qt::PenStyle を実行できない場合、属性/関数をどのように宣言すればよいですか? オブジェクトを明示的に作成するとはどういう意味ですか? 私は引用が言うように何かをしようとしましたが、私はそれを解決することができませんでした. 他の同様のエラーを解決することはできましたが、属性または関数の宣言ではありませんでした。
完全なエラー:
qt - QVariant::QVariant(Qt::BrushStyle) はプライベートです
次のコードでは、Qt 5 でのコンパイル中にエラーが発生します。
エラー メッセージは次のとおりです。
どうすればそれを克服できますか?
c++ - QVariant のカスタム型は空の文字列に変換されます
入力からトークンのストリームを生成する字句スキャナーを書いています。これらのトークンにはtypeとvalueがあります。私は Qt を使用しているので、トークン データを として保存することにしましたQVariant
。これは、非カスタム タイプのトークン データに対して非常にうまく機能します。
残念ながら、トークン内に格納されているカスタム タイプもいくつかあります。トークンには、toString()
(デバッグ用に) トークンの説明を出力する関数がありますが、カスタム型のデータを持つすべてのトークンに対して、この関数は空の文字列を返します。コードは次のようになります。
Test.h:
Token.h:
Token.cpp:
スキャナからの出力例:
トークンには Test クラスが含まれており、バリアントがそのTT_TEST
値を出力することを期待しています。残念ながら、これは機能しません。機能しない多くのソリューションを試しました。私の現在の回避策は次のようになります。
および変更されたtoString()
関数:
私はすべてのカスタム型に対してこれを行う必要がありますが、これはかなり不器用で間違っていると感じています。
この問題にはもっと良い解決策があるに違いないと思います。あなたの誰でもできますか:
QVariant
問題をより良い方法で解決する方法を教えてください。- なしでまったく異なる解決策を提案し
QVariant
ます。(以前にテンプレートソリューションがありましたが、そこで別の問題に遭遇したため、提案されている場合は例が必要です)。
?
long-integer - unsigned long int を QVariant に変換する方法
QVariant がlong
およびの機能を提供していないことに気付きましたunsigned long
。int
、unsigned int
、long long
およびへの変換を提供しますunsigned long long
。
long
現在のデスクトップ アーキテクチャではとint
が同等であることがわかりますが、理論的な観点からはそうではありません。
long
aを aに格納したい場合はQVariant
、最初に値を に変換する必要がありますlong long
。これを克服する他の方法があれば知りたいです。
第二に、それを行うためのより良い/より簡単な方法を知りたいです。つまり、より単純なコードを使用し、不要なスペースや命令の使用を避けます。
c++ - ネストされた QVariantMap
ネストされた QVariantMap を使用していますが、パス (文字列リスト) を受け取り、低レベルの QVariantMap へのポインターを返すメソッドの定義に問題があります。
...
...
次のエラーが発生しました。
そして私はその理由を知っています。問題は、ネストされた構造の一部へのポインターを取得する必要があることですが、 QVariant の内部への参照を取得できません。ネストされた QVariantMap への割り当ての投稿で提案されている data_ptr を使用しようとしましたが、運がありませんでした。明らかな理由から、挿入/削除/値に特別なラッパーを作成したくない(そのため、私が理解しているように、リンクされたトピックで受け入れられた回答は私の場合ではありません)。
私は試した:
- QVariant 内に QPointer を格納する - QVariant は QObject ではないため、うまくいきません。
- QVariant::fromValue( QVariantMap *) を使用してポインターを保存しますが、 toMap() を呼び出すと、ポインターではなく QVariantMap が返されるため、一時的なアドレスの取得エラーが再び発生しました。いずれにせよ、これが私が望んでいるものだとは思いません。
誰かがそれを適切に行うにはどうすればよいですか?
c++ - QT で配列を使用して JSON を解析する
QT で JSON を解析したい。JSON は次のようになります。
そして、私は次のコードを使用します:
したがって、「tuc」配列のバリアント リストを取得します。一般に、キー「フレーズ」を持つすべてのオブジェクトと、この配列の内容であるそれらの値を取得したいと考えています。ここから抜け出す方法はありますか?または、これは QVariantList では機能しませんか?