W projekcie, nad którym aktualnie pracuję, natknęłam się na pewien problem, który spowodował nieprawidłowe działanie dużego fragmentu aplikacji napisanej w C, dołączonej do interfejsu implementowanego w Qt (używam wersji 4.8.0, choć nie ma to zbyt wielkiego znaczenia).
Okazało się że część analityczna programu używała w wielu miejscach funkcji atof()
do przekształcania liczb zapisanych w pliku w postaci ddd.ddd
(separatorem była zatem kropka).
#include <cstdlib> double atof( const char * str );
Funkcja nie odczytywała części dziesiętnych z powodu nieprawidłowego traktowania separatora. Ten poważny błąd, uniemożliwiający działanie całego programu wystarczyło naprawić jedną linijką:
setlocale(LC_NUMERIC,"C");
Linijkę tę należy umieścić w pliku main.cpp
, tuż po utworzeniu obiektu typu QApplication
. Teraz mój plik wygląda następująco:
#include <QtGui/QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); setlocale(LC_NUMERIC,"C"); MainWindow w; w.show(); return a.exec(); }
I – wszystko działa 🙂