現在のプロジェクトで予期しない動作が発生しています。
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のバグですか?