4

GUIにqt4.8(qt quick 1.1)まで使用していたときは、問題なく度を印刷できました\260が、qt5以降にアップグレードすると、これは機能しなくなりました。ネットで検索したところ、( http://www.fileformat.info/info/unicode/char/00b0/index.htm )などの関連リンクが多数見つかりました。試してみましたが、助けにはなりませんでした。usinfUTF形式のライブラリを含める必要がありますか、そうでない場合は問題があります。誰か助けてください。何をすべきか?

@Revised、ここでは何が行われているかを説明します。

最初に、印刷可能なステートメントを string に格納していますtext。cpp 関数のように:-

                 sprintf(text, "%02d\260  %03d\260 ",latD, longD);

                 QString positionText(text.c_str());
                 return positionText;     

そしてpositionText、qmlファイルで使用してウィンドウに表示します。

それで、誰かがディスプレイで学位を取得するために何をする必要があるか答えてください?

ありがとう。

4

4 に答える 4

8

問題は単純で、\260おそらく Ansii C-string ( const char []) 内で使用したものです。このような場合、Qt はコーデックを使用してこれを Unicode 文字に変換しています。Qt のバージョンを変更すると、何らかの理由でデフォルトのコーデックが変更され、これが動作を停止した理由です。

とにかくあなたのアプローチは間違っています。コーデックに依存する C-string は使用しないでください (通常、これはこの種の問題につながります)。QChar const を定義するか、翻訳QChar(0260)を使用して提供するのが最善の方法です。tr

度付き文字列で代表的な例を挙げていただければ、誰かが最適な解決策を提供してくれるでしょう。


編集:

コードを次のように変更します。

const QChar degreeChar(0260); // octal value
return QString("%1%3  %2%3").arg(latD, 2, 10, '0').arg(longD, 3, 10, '0').arg(degreeChar);

または、この行を処理する翻訳を追加します。

return tr("%1degree  %2degree").arg(latD, 2, 10, '0').arg(longD, 3, 10, '0');

この行のこの翻訳は、現在のロケールに関係なく常に追加する必要があることに注意してください。

于 2013-09-12T08:23:25.740 に答える
3

試す

return QString::fromLatin1(text);

または、それが機能しない場合は、別の静的QString::fromXXXメソッド。

于 2013-09-12T09:42:05.660 に答える