QString i problem z kropką
-
Wykonuję następującą operację:
@
this->file_name= QFileDialog::getOpenFileName
(
handle_parent,
QObject::tr("OtwĂłrz plik konfiguracyjny"),
".",
QObject::tr("Images (.csv)")
);
@
Powoduje to zawieszenie programu.
Po badaniach wyszło, iż problemem jest kropka przed rozszerzeneim pliku.
Po małej zmianie z kropki na # przypisanie jest ok.
@
this->file_name=
QFileDialog::getOpenFileName
(
handle_parent,
QObject::tr("OtwĂłrz plik konfiguracyjny"),
".",
QObject::tr("Images (.csv)")
).replace(".","#");
@
Ten sam problem się pojawia w momencie gdy próbuję
odwrócić sytuację:
@
QFile file(this->file_name.replace("#","."));
@
podanie bezpośrednio filename.csv z kropką powoduje dokładnie ten sam problem.
Czy ktoś się spotkał z tak dziwacznym problemem że nei można w QString umieścić ciągu znaków z kropką ??? -
W QString można umieścić dowolny ciąg znaków, nawet wiele \0 i znaki niewidoczne (cokolwiek co jest w UTF-16).
Proszę podaj więcej informacji na temat objawów "zawieszenia" programu. Widać jakieś informacje o błędzie, coś pojawia się na konsoli, może segfault?
-
Objaw jest głupi ale wynikł z.... zupełnie niepowiązanego braku wskaźnika do obiektu około 20 lini nizej.
przypisanie kropki w QString powodowało, że program zwisał. Przez przypadek odkryłem że przestał zwisać jak wykomentowałem cało funkcji poniżej obsługi pliku a przechodził przez ten błędny wskaźnik obiektu gdy nieprzypisywałem kropki do QString. Obiekt był niepowiązany z QString i wyliczał crc32 z daty i czasu a zapomniałem w konstruktorze przypisać obiekt do wskaźnika. Niejednoznaczność błędnego zachowania i miejsca błędu jest zaskakująca:void themes::load(QWidget* handle_parent)
{
qDebug() << FLV << " ";
this->file_select(handle_parent); // <<<< Tu następował zwis nawet jak zastąpiłem bezpośrednim wpisaniem ciągu w QString
qDebug() << FLV << "this->file_name= " << this->file_name;
this->max_records_set(RUND_MAX); // <<<< W tej funkcji użyłem niezainicjowany wskaźnik.
if (0!=this->load_file())
{ /* blad zaczytania pliku tematów */
//hmain->all_free();
qDebug() << FLV << " ";
this->all_themes=0;QMessageBox msgBox;
msgBox.setIconPixmap( QPixmap("logo32.png") );
msgBox.setWindowTitle("Uwaga!");
msgBox.setIcon(QMessageBox::Warning);
msgBox.setText(QObject::trUtf8("Błąd zaczytania pliku tematów do głosowania"));
msgBox.exec(); // wywołanie okienka z zapytaniem
this->file_load_ok=0;
qDebug() << FLV << " ";
}
else
{
qDebug() << FLV << " ";
this->file_load_ok=1;
}
qDebug() << FLV << " ";
}Problem rozwiązany.