現在のプロジェクトで予期しない動作が発生しています。
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関数で何かをしますか? 実行中にすべてが発生するため、その方法がわかりません。
に置き換えるstodとQString::toDouble問題が解決します...
を使用してgcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3), GNU ld (GNU Binutils for Ubuntu) 2.24います。
その他のコードの依存関係にはEigen3、Boost.Python. コードは、QtCreator を IDE とする CMake プロジェクトを使用してビルドされます。
この問題がどこから来たのか誰にも分かりませんか? これはQtのバグですか?