0

私は MSVCC / Windows 用に書かれたプロジェクトに取り組んでおり、GCC / Linux に移植する必要があります。プロジェクトには独自の文字列クラスがあり、そのデータを Qt の QString に格納します。wchar_t* への変換には、もともとこのメソッドがありました (Windows 用):

const wchar_t* String::c_str() const
{
    if (length() > 0)
    {
        return (const wchar_t*)QString::unicode();
    }
    else
    {
        return &s_nullString;
    }
}

unicode() は QChar (16 ビットの長さ) を返すため、これは Windows では wchar_t が 16 ビットであるため機能しましたが、GCC では wchar_t の長さが 32 ビットであるため、機能しなくなりました。私はこれを使用してそれを解決しようとしました:

const wchar_t* String::c_str() const
{
    if ( isEmpty() )
    {
        return &s_nullString;
    }
    else
    {
        return toStdWString().c_str();
    }
}

これに関する問題は、この関数が返されたときにオブジェクトがもう生きていないため、これがうまくいかないことです。この問題を解決するには、次のいずれかの方法しかないと思います。

  1. String::c_str() を使用せず、 .toStdString().c_str() を直接呼び出します
  2. GCC が wchar_t を 16 ビット型として扱うようにする

可能性 1 は、私にとって数時間の不必要な作業を意味し、可能性 2 が可能かどうかはわかりません。私の質問は、この問題を最もよく解決するにはどうすればよいですか? 有益な提案をいただければ幸いです。ありがとうございました。

4

1 に答える 1

0

私の意見では、2 つの方法があります。

  1. 必要に応じて QString を wchar_t* に変換します
  2. QString に wchar_t* を格納させ、QString::unicode を直接返すようにします

これら 2 つの関数は、QString を std::string および std::wstring
QString::toStdWString
QString::toStdStringに変換できます。

QString を ucs4 としてビルドするには:

#define QT_QSTRING_UCS_4
#include "qstring.h"

これは qt3( qstring.h )で使用できます。qt4 のソースが見つかりません。

于 2009-12-07T16:59:21.260 に答える