問題タブ [qstring]
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++ - QString の std::ostream と operator<< を継承するクラス
地獄 !テキストを標準出力に出力するのに役立つクラスを作成しようとしています...とにかく、1つのことを除いてすべてが機能しています。呼び出されたクラスのオブジェクトを作成したとしましょう。これを行うと、すべてが正常に機能します。
そして、私がこれを行うときにも機能します:
しかし、この 2 つのことを連鎖させようとすると、次のようになります。
非常に大きなエラーが発生しました。最終的には、operator<< が QString 型のパラメーターを受け入れないことを示しています。QString をチェーンしないと問題なく動作するため、これは奇妙です...これも動作します:
この:
だから私は自分の operator<< 関数に問題があると思います... operator<< を正しく作成しなかったか、正しい値を返しません。または、他の何かが間違っている可能性があります。とにかく、私はそれを理解できないので、私を助けてくれませんか? 以下はソースコードです:
output.h: http://xx77abs.pastebin.com/b9tVV0AV output.cpp: http://xx77abs.pastebin.com/5QwtZRXc
そしてもちろん、超大きなエラー :D
http://xx77abs.pastebin.com/8mAGWn47
EDIT:あなたが不思議に思っているのは、私は名前空間を使用していないということです...
c++ - QMapにコピーするときのQStringエラー。スコープの問題?
私が持っているQWidgetクラスのデストラクタ内のキーとしてQMapにQStringを追加しようとすると、segfaults(mallocが悪いためにsigabrtsになることもあります)に関して現在立ち往生しています-QStringの暗黙の共有モデルと関係があると思います範囲。
MDIのサブウィンドウとして機能するQWidgetがあります。このQWidgetには、子としていくつかのQGLWidget派生ビューポートインスタンスがあります。サブウィンドウには、プロジェクトファイルの設定を含むQMap <QString、QVariant>ラッパークラスがあります。サブウィンドウを閉じると、デストラクタがQWidget :: deleteChildren()を呼び出して、各ビューポートを削除します。ビューポートデストラクタでは、現在の設定がサブウィンドウの設定に保存されます。例:
保存したいプロパティごとにsWin.setSetting()が呼び出されます。「sWin」は、サブウィンドウデストラクタの最後で削除されるQMapラッパークラスへの参照です。setSetting()を呼び出すまでは、すべて問題ありません。
この設定は最初のビューポートで正常に機能し、2番目の最初のsetSetting()呼び出しで、次の場所でセグメンテーション違反が発生します。
QString参照がQMapに渡されると、ディープコピーが失敗するのがわかりますか?もしそうなら、なぜですか?デストラクタが戻っていないため、作成したQStringはまだスコープから外れていません。そして、なぜこれは最初のビューポートではなく2番目のビューポートで失敗するのでしょうか。
ときどき、sigabrt malloc()が発生します。最初のコード例のsetSetting()行のoperator+でメモリが破損しています。しかし、繰り返しになりますが、最初のビューポートではなく、2番目のビューポートの破壊の開始時に。
非常に言葉の多い質問をお詫びしますが、多くの翻訳ユニットにまたがる大量のコードが関係しています。この問題の手がかりは大いに役立ちます!
前もって感謝します。カム
アップデート
最初のコードサンプルを次のように変更しました。
スコープの問題のテストとして。また、動作する場合もあれば、まったく同じエラーが発生する場合もあります。したがって、おそらくヒープQStringが破棄されているので、メモリ位置が上書きされているかどうかによって異なります。ただし、deleteを呼び出したり、アプリケーションを閉じたりしないため(MDIサブウィンドウのみ)、これも意味がありません。
その他のコード
sWinは、新しいサブウィンドウがインスタンス化されるときにヒープ上に作成されます。これは、サブウィンドウのメソッドからの参照としてビューポートクラスのデストラクタに取り込まれます。
Sy_projectは(現在)QMapの単純なラッパークラスです。私の完全なビューポート基本クラスデストラクタはこれです(派生クラスではなく、ここで失敗します):
Valgrind
Valgrindのmemcheckを使用した後、スタックトレースに似た多数のエントリを発見しました。これまで使用したことがないので、まだ解読中ですが、setSetting()呼び出しの後にSy_projectクラス(QMapのラッパー)が削除され、QMapに無効な参照が残っているということですか?
qt - QString::arg() の引数で "%1" を処理するには?
誰もが大好き
replacement1
しかし、実際に含まれている、%1
または%2
どこにでもあるわずかな可能性があるとすぐに、物事はかゆくなります。次に、2 番目QString::arg()
は、再導入されたもののみ、%1
または両方の%2
オカレンスを置き換えます。とにかく、"%1"
おそらく意図したリテラルを取得できません。
これを克服するための標準的なトリックはありますか?
遊ぶための例が必要な場合は、これを取ってください
これは出力されます
それ以外の
予想どおりです(そうではありません)。
与える
と
与える
c++ - UnicodeQStringをstd::stringに変換する方法は?
をに変換する必要がありQString
ますstd::string
。ただし、この文字列にUnicode記号が含まれている場合は、を取得し????
ます。適切なエンコーディングで文字列を変換するにはどうすればよいですか?
ありがとうございました。
c++ - QStringタイプのC++のswitch/caseステートメント
プログラムでswitch-caseを使用したいのですが、コンパイラーから次のエラーが発生します。
switch
ステートメントを?で使用するにはどうすればよいQString
ですか?
私のコードは次のとおりです。
qt - QString Unix エポック時間を QString 標準時間に変換する
UNIX 時間 (例: 1295874681) を含む QString パラメーターを取り、QString を含む標準時刻形式 (例: Mon, 24 Jan 2011 13:11:21 GMT) に変換して返すエレガントな C++ 関数が必要です。
pointers - ポインタから戻ったオブジェクト
どうやってやるの??
助けていただければ幸いです。
c++ - Qt: ケース インセンシティビティ モードで QString の 2 つの QSet を減算する方法
Qtを使用して論理的な問題に取り組んでいます。QString の 2 つの QSet があります。
set2 から set1 を減算したいので、次を使用します。
そして、私は得ます:
ただし、この場合、set1 にはこのレコードが含まれていますが、「bbb」は set2 から削除されません。これは、デフォルトの QString::contains メソッド (QSet::subtract で使用されるメソッド) が大文字と小文字を区別するためです。
大文字と小文字の区別モードを定義するパラメーターを取る別の QString::contains メソッドがありますが、それをどのように使用できるかはわかりません。
QStringの2つのQSet間で大文字と小文字を区別しない減算を行う方法を知っている人はいますか?
これが私がこれまでに試したことです:
両方のセットを大文字に変換set2 はリストに表示されるため、すべての項目が大文字 (または小文字以外) の場合は見栄えがよくありません。
QSet クラスを拡張し、減算メソッドをオーバーライドする このクラスを MyStringSet カスタム クラスで拡張しようとしましたが、Qt にあまり慣れておらず、非常に複雑に思えます。