Qt - QFile & QTextStream - jak otworzyć plik za pomocą QFileDialog

0

Mam okienko dialogowe otwierania pliku QFileDialog próbuję otworzyć plik tekstowy i niestety się nie otwiera, na pierwszy rzut oka kod wydaje się być poprawny. Co tu jest źle ?

        void OpenFile(void){
        QString strData;
        QStringList field;
        MyDataModel data;

        QRegularExpression regex("[\n|;]");

        QStringList seperators = {";", ":", "," ," "};
        QString filter = "All Files (*.*) ;; Text File (*.txt) ;; CSV File (*.csv)";
        QString getFileName = openFileDialog->getOpenFileName(this, QString("Open File"), QString("/"), filter);

        qDebug()<< getFileName.toUtf8();

        QFile openFile(getFileName);

        if(!openFile.open(QFile::ReadOnly | QFile::Text)){
            qDebug()<<"Nie otwarto pliku";
        }
        else{
            QTextStream streamFile(&openFile);

            while(streamFile.atEnd()){
                strData = streamFile.readLine();
                field << strData;
                qDebug()<< field;
                wiersz++;
            }
            openFile.flush();
            openFile.close();
        }
    }
0

Dlaczego nie używasz statycznego getOpenFileName()?

niestety się nie otwiera

Bo pewnie coś jest nie tak.

Daj więcej szczegółów.

0

@kq:

wyświetla się dialog?

tak, dowód poniżej

screenshot-20201205184257.png

Czy dialog zwraca poprawną wartość?

tak, zwraca poprawną ścieżkę pliku który otwieram

screenshot-20201205184508.png

Czy open() na pliku zwraca true?

jeżeli zwraca ścieżkę, to wydaje się, że zwraca true

Serio, masz kilka rzeczy w kodzie do debugowania, ale my mamy zgadywać?

jeszcze nie do końca wiem jak się tym obsłużyć

0

jeżeli zwraca ścieżkę, to wydaje się, że zwraca true

Czyli "Nie otwarto pliku" nie wyświetla się?

0

wyświetla się, że niby otworzono... ale jak w kodzie mam

strData = streamFile->readLine();
field << strData;
qDebug()<< field;

to nic nie widzę, żeby wyświetlił, że coś wczytał, dopiero jak tą pętlę wyjmę z tego warunku i wkleję luzem to działa ale niestety pętla jest nieskończona...

2

znalazłem błąd !!! Taki mały, przeoczony !!!

w pętli while brakowało NEGACJI !!!

powinno być !streamFile->atEnd()

while(!streamFile->atEnd()){
   strData = streamFile->readLine();
   field << strData;
   qDebug()<< field;
   wiersz++;
}

dlatego bez negacji pętla była nieskończona...

1 użytkowników online, w tym zalogowanych: 0, gości: 1