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ą ???


  • Moderators

    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.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.