3

現在のプロジェクトで予期しない動作が発生しています。

DICOM ライブラリを使用して、dcmtkいくつかの dicom ファイルから情報を読み取りQt、画像を表示します。

情報抽出中に、「<64bit float>\<64 bit float>」(Dicom Tag PixelSpacing) 形式のフィールドを変換する必要があります。「\」で 2 つの文字列に分割し、文字列を double に変換します。これまでのところ、すべて正常に動作しています。

まあ、ほぼ:文字列を double に変換するQApplicationにオブジェクトを作成すると、常にdoubleではなく整数が返されます。

コードは次のようになります。

// Faulty situation
Database db;

QApplication app(&argc, argv);
db.fill_from_source(source); // here i get ints instead of doubles

// Rearrange code and recompile:
Database db;
db.fill_from_source(source); // now it gets me doubles.

QApplication app(&argc, argv);

// The fill function looks like this (simplified)
void Database::fill_from_source(const Source& source){

    string s = source.get_pixel_spacing_string();
    vector<string> s2 = split(s, "\\");

    // get the double, that should not be integers!
    double a = stod(s2[0]);
    double b = stod(s2[1]);
}

QtCreator と GDB を使用してコードをステップ実行すると、さらに混乱します。ただし、実行可能ファイルを実行すると、整数が再び取得されます。

そこで、問題を操作まで追跡しましstodた。DICOMファイルから正しい文字列を取得しましたがstod、ドットの後の数字が切り捨てられた後です。stdlibと同じ動作strtod

QApplication割り当てはstd::stod関数で何かをしますか? 実行中にすべてが発生するため、その方法がわかりません。

に置き換えるstodQString::toDouble問題が解決します...

を使用してgcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3), GNU ld (GNU Binutils for Ubuntu) 2.24います。

その他のコードの依存関係にはEigen3Boost.Python. コードは、QtCreator を IDE とする CMake プロジェクトを使用してビルドされます。

この問題がどこから来たのか誰にも分かりませんか? これはQtのバグですか?

4

2 に答える 2