Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Windows not responding on reading file from txt
Forum Update on Monday, May 27th 2025

Windows not responding on reading file from txt

Scheduled Pinned Locked Moved Solved General and Desktop
file readqt creatorqfile
21 Posts 4 Posters 4.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by mrjj
    #4

    Hi
    The reason it stops responding is this if sentence

    QString line = stream.readLine();
    while (!line.isNull()) {  <<<  since we just read a line above, it wont ever be be true and loop will loop forever
        continue;
    }
    

    you want logic to look like

    QFile inputFile(fileName);
    if (inputFile.open(QIODevice::ReadOnly))
    {
       QTextStream in(&inputFile);
       while (!in.atEnd())
       {
          QString line = in.readLine();
          ... put line to plainTextEdit
       }
       inputFile.close();
    }
    
    D 1 Reply Last reply
    3
    • mrjjM mrjj

      Hi
      The reason it stops responding is this if sentence

      QString line = stream.readLine();
      while (!line.isNull()) {  <<<  since we just read a line above, it wont ever be be true and loop will loop forever
          continue;
      }
      

      you want logic to look like

      QFile inputFile(fileName);
      if (inputFile.open(QIODevice::ReadOnly))
      {
         QTextStream in(&inputFile);
         while (!in.atEnd())
         {
            QString line = in.readLine();
            ... put line to plainTextEdit
         }
         inputFile.close();
      }
      
      D Offline
      D Offline
      deleted286
      wrote on last edited by
      #5

      @mrjj thank u. It works but it only reads the last line. I want to read every line and show the screen one by one

      mrjjM 1 Reply Last reply
      0
      • D deleted286

        @mrjj thank u. It works but it only reads the last line. I want to read every line and show the screen one by one

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by mrjj
        #6

        @suslucoder

        hi
        it does read all of the files but if you do
        ui -> plainTextEdit->setPlainText(line);
        you then replace all text with the line you just read, over and over. so it only show the last line in the end.

        so you want to do

        ui -> plainTextEdit->appendPlainText(line);

        https://doc.qt.io/qt-5/qplaintextedit.html#appendPlainText

        to add the lines as you read them.

        ps. you dont have to read it line by line if all you want is to read it all and put in plainText.
        https://doc.qt.io/qt-5/qtextstream.html#readAll

        QFile inputFile(fileName);
        if (inputFile.open(QIODevice::ReadOnly))
        {
          QTextStream in(&inputFile);
          QString all = in.readAll();
          ui -> plainTextEdit->setPlainText(all);
        }
        
        D 1 Reply Last reply
        1
        • mrjjM mrjj

          @suslucoder

          hi
          it does read all of the files but if you do
          ui -> plainTextEdit->setPlainText(line);
          you then replace all text with the line you just read, over and over. so it only show the last line in the end.

          so you want to do

          ui -> plainTextEdit->appendPlainText(line);

          https://doc.qt.io/qt-5/qplaintextedit.html#appendPlainText

          to add the lines as you read them.

          ps. you dont have to read it line by line if all you want is to read it all and put in plainText.
          https://doc.qt.io/qt-5/qtextstream.html#readAll

          QFile inputFile(fileName);
          if (inputFile.open(QIODevice::ReadOnly))
          {
            QTextStream in(&inputFile);
            QString all = in.readAll();
            ui -> plainTextEdit->setPlainText(all);
          }
          
          D Offline
          D Offline
          deleted286
          wrote on last edited by
          #7

          @mrjj I got it. Thank you so much it works. If I add a timer to code, cann it writes one line to the screen every 20 seconds

          mrjjM 1 Reply Last reply
          0
          • D deleted286

            @mrjj I got it. Thank you so much it works. If I add a timer to code, cann it writes one line to the screen every 20 seconds

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by mrjj
            #8

            @suslucoder
            Hi
            Well not directly with that code as we loop until all is added.

            But you could do (pseudo code. didn't compile it)

            
             QStringList allLines; // this goes in .h as a class member
             int curIndex = 0; // this goes in .h as a class member
            
            QFile inputFile(fileName);
            if (inputFile.open(QIODevice::ReadOnly))
            {
               QTextStream in(&inputFile);
               while (!in.atEnd())
               {
                  QString line = in.readLine();
                  allLines.append(line); // add to list 
               }
               inputFile.close();
            }
            
                QTimer *timer = new timer(this);
                connect(timer, &QTimer::timeout, [this]() {
                    QString line = allLines[curIndex]; // get a line from list
                    ui -> plainTextEdit->setPlainText(line); // add the line
                    if (curIndex < allLines.size() - 1 ) // if not at end of allLines 
                        curIndex++; // raise index
                });
                timer->start(20000);
            
            
            
            
            
            
            D 1 Reply Last reply
            1
            • mrjjM mrjj

              @suslucoder
              Hi
              Well not directly with that code as we loop until all is added.

              But you could do (pseudo code. didn't compile it)

              
               QStringList allLines; // this goes in .h as a class member
               int curIndex = 0; // this goes in .h as a class member
              
              QFile inputFile(fileName);
              if (inputFile.open(QIODevice::ReadOnly))
              {
                 QTextStream in(&inputFile);
                 while (!in.atEnd())
                 {
                    QString line = in.readLine();
                    allLines.append(line); // add to list 
                 }
                 inputFile.close();
              }
              
                  QTimer *timer = new timer(this);
                  connect(timer, &QTimer::timeout, [this]() {
                      QString line = allLines[curIndex]; // get a line from list
                      ui -> plainTextEdit->setPlainText(line); // add the line
                      if (curIndex < allLines.size() - 1 ) // if not at end of allLines 
                          curIndex++; // raise index
                  });
                  timer->start(20000);
              
              
              
              
              
              
              D Offline
              D Offline
              deleted286
              wrote on last edited by
              #9

              @mrjj thank you so much

              mrjjM 1 Reply Last reply
              0
              • D deleted286

                @mrjj thank you so much

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #10

                @suslucoder
                Np, i hope its not to much cheating if its an assignment :)

                D 1 Reply Last reply
                0
                • mrjjM mrjj

                  @suslucoder
                  Np, i hope its not to much cheating if its an assignment :)

                  D Offline
                  D Offline
                  deleted286
                  wrote on last edited by
                  #11

                  @mrjj hahah im newly graduated from university, I want to improve myself in Qt. That's why I think of different scenarios to challenge myself.

                  mrjjM 1 Reply Last reply
                  0
                  • D deleted286

                    @mrjj hahah im newly graduated from university, I want to improve myself in Qt. That's why I think of different scenarios to challenge myself.

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #12

                    @suslucoder
                    Oh all good then. :)
                    Thats a good idea as one mostly get better at coding, by coding.

                    D 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      @suslucoder
                      Oh all good then. :)
                      Thats a good idea as one mostly get better at coding, by coding.

                      D Offline
                      D Offline
                      deleted286
                      wrote on last edited by
                      #13

                      @mrjj I didnt understand the idea behind --> connect(timer, &QTimer::timeout, this

                      Cant we do this using signal and slot?

                      There is an error like expected body of lambda expression

                      D 1 Reply Last reply
                      0
                      • D deleted286

                        @mrjj I didnt understand the idea behind --> connect(timer, &QTimer::timeout, this

                        Cant we do this using signal and slot?

                        There is an error like expected body of lambda expression

                        D Offline
                        D Offline
                        deleted286
                        wrote on last edited by
                        #14

                        @mrjj Hey, i got ASSERT failure in QList<T>::operator[]: "index out of range" ERROR. I cannot understand why. Can you help me?

                        mrjjM 1 Reply Last reply
                        0
                        • D deleted286

                          @mrjj Hey, i got ASSERT failure in QList<T>::operator[]: "index out of range" ERROR. I cannot understand why. Can you help me?

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by mrjj
                          #15

                          @suslucoder
                          hi
                          its means you try to access some index in a list and that index is too big.
                          I would guess on curIndex if it gets bigger than the allLines.size()
                          or if allLines is empty.
                          Did you load the file to the list before starting the timer ?

                          its a lambda, yes, but you can also use a normal slot to do the same.

                          D 1 Reply Last reply
                          0
                          • mrjjM mrjj

                            @suslucoder
                            hi
                            its means you try to access some index in a list and that index is too big.
                            I would guess on curIndex if it gets bigger than the allLines.size()
                            or if allLines is empty.
                            Did you load the file to the list before starting the timer ?

                            its a lambda, yes, but you can also use a normal slot to do the same.

                            D Offline
                            D Offline
                            deleted286
                            wrote on last edited by
                            #16

                            @mrjj ``` I couldnt find my mistake :(

                            #include "mainwindow.h"
                            #include "ui_mainwindow.h"
                            #include <QFile>
                            #include <QTextStream>
                            #include <QMessageBox>
                            #include <QTimer>
                            #include <QList>
                            #include <qlist.h>
                            #include <QDebug>
                            
                            
                            MainWindow::MainWindow(QWidget *parent)
                                : QMainWindow(parent)
                                , ui(new Ui::MainWindow)
                            {
                                ui->setupUi(this);
                            
                                QTimer *timer = new QTimer(this);
                            
                                connect(timer, SIGNAL(timeout()), SLOT(on_pushButton_clicked()));
                            
                                QString line = allLines[curIndex];
                                ui->plainTextEdit->setPlainText(line);
                                if(curIndex < allLines.size() - 1 ) {
                                    curIndex++;
                                }
                                
                                
                                timer->start(20000);
                                
                            }
                            MainWindow::~MainWindow()
                            {
                                delete ui;
                            }
                            
                            
                            void MainWindow::on_pushButton_2_clicked()  //write
                            {
                                QFile file("C:/Users/ilknu/Documents/QFileDemo/abc.txt");
                                if(!file.open(QFile::WriteOnly | QFile::Text )) {
                            
                                    QMessageBox::warning(this, "title", "file not open");
                            
                            
                                }
                            
                                QTextStream out (&file);
                                QString text = ui->plainTextEdit->toPlainText();
                                out << text;
                                file.flush();
                                file.close();
                            
                            
                            }
                            
                            void MainWindow::on_pushButton_clicked()  //read
                            {
                            
                                QFile file("C:/Users/ilknu/Documents/QFileDemo/abc.txt");
                            
                                // QMessageBox::warning(this, "title", "file not open");
                                // QTextStream in (&file);
                                //    while (!in.atEnd()) {
                                //        QString text = in.readLine();
                                //    }
                            
                                //QString text = in.readLine();
                            
                              if(file.open(QIODevice::ReadOnly)) {
                                  QTextStream in (&file);
                                  while (!in.atEnd()) {
                            
                                     // QString line = in.readLine();
                                     //  ui -> plainTextEdit->setPlainText(all);
                            
                             QString line = in.readLine();
                             allLines.append(line);
                             
                                      }
                             }
                            
                            
                                  file.close();  }
                            
                              //  file.close();
                            
                            mrjjM 1 Reply Last reply
                            0
                            • D deleted286

                              @mrjj ``` I couldnt find my mistake :(

                              #include "mainwindow.h"
                              #include "ui_mainwindow.h"
                              #include <QFile>
                              #include <QTextStream>
                              #include <QMessageBox>
                              #include <QTimer>
                              #include <QList>
                              #include <qlist.h>
                              #include <QDebug>
                              
                              
                              MainWindow::MainWindow(QWidget *parent)
                                  : QMainWindow(parent)
                                  , ui(new Ui::MainWindow)
                              {
                                  ui->setupUi(this);
                              
                                  QTimer *timer = new QTimer(this);
                              
                                  connect(timer, SIGNAL(timeout()), SLOT(on_pushButton_clicked()));
                              
                                  QString line = allLines[curIndex];
                                  ui->plainTextEdit->setPlainText(line);
                                  if(curIndex < allLines.size() - 1 ) {
                                      curIndex++;
                                  }
                                  
                                  
                                  timer->start(20000);
                                  
                              }
                              MainWindow::~MainWindow()
                              {
                                  delete ui;
                              }
                              
                              
                              void MainWindow::on_pushButton_2_clicked()  //write
                              {
                                  QFile file("C:/Users/ilknu/Documents/QFileDemo/abc.txt");
                                  if(!file.open(QFile::WriteOnly | QFile::Text )) {
                              
                                      QMessageBox::warning(this, "title", "file not open");
                              
                              
                                  }
                              
                                  QTextStream out (&file);
                                  QString text = ui->plainTextEdit->toPlainText();
                                  out << text;
                                  file.flush();
                                  file.close();
                              
                              
                              }
                              
                              void MainWindow::on_pushButton_clicked()  //read
                              {
                              
                                  QFile file("C:/Users/ilknu/Documents/QFileDemo/abc.txt");
                              
                                  // QMessageBox::warning(this, "title", "file not open");
                                  // QTextStream in (&file);
                                  //    while (!in.atEnd()) {
                                  //        QString text = in.readLine();
                                  //    }
                              
                                  //QString text = in.readLine();
                              
                                if(file.open(QIODevice::ReadOnly)) {
                                    QTextStream in (&file);
                                    while (!in.atEnd()) {
                              
                                       // QString line = in.readLine();
                                       //  ui -> plainTextEdit->setPlainText(all);
                              
                               QString line = in.readLine();
                               allLines.append(line);
                               
                                        }
                               }
                              
                              
                                    file.close();  }
                              
                                //  file.close();
                              
                              mrjjM Offline
                              mrjjM Offline
                              mrjj
                              Lifetime Qt Champion
                              wrote on last edited by mrjj
                              #17

                              Hi
                              Well

                              MainWindow::MainWindow(QWidget *parent)
                              : QMainWindow(parent)
                              , ui(new Ui::MainWindow)
                              {
                              ui->setupUi(this);

                              QTimer *timer = new QTimer(this);
                              
                              connect(timer, SIGNAL(timeout()), SLOT(on_pushButton_clicked()));
                              

                              /// all this should be in the slot -> on_pushButton_clicked if that how you load it

                              QString line = allLines[curIndex]; /// this will CRASH as you didnt fill list yet
                              ui->plainTextEdit->setPlainText(line);
                              if(curIndex < allLines.size() - 1 ) {
                              curIndex++;
                              }

                              timer->start(20000);  /// do not start timer before you have loaded into list..
                              

                              So it was mostly the order of the code

                              D 1 Reply Last reply
                              0
                              • mrjjM mrjj

                                Hi
                                Well

                                MainWindow::MainWindow(QWidget *parent)
                                : QMainWindow(parent)
                                , ui(new Ui::MainWindow)
                                {
                                ui->setupUi(this);

                                QTimer *timer = new QTimer(this);
                                
                                connect(timer, SIGNAL(timeout()), SLOT(on_pushButton_clicked()));
                                

                                /// all this should be in the slot -> on_pushButton_clicked if that how you load it

                                QString line = allLines[curIndex]; /// this will CRASH as you didnt fill list yet
                                ui->plainTextEdit->setPlainText(line);
                                if(curIndex < allLines.size() - 1 ) {
                                curIndex++;
                                }

                                timer->start(20000);  /// do not start timer before you have loaded into list..
                                

                                So it was mostly the order of the code

                                D Offline
                                D Offline
                                deleted286
                                wrote on last edited by
                                #18

                                @mrjj im so confused about the order of my code. I tried all combinations that come to my mind, but when i clicked the read button my application was ended forcefully :(

                                mrjjM 1 Reply Last reply
                                0
                                • D deleted286

                                  @mrjj im so confused about the order of my code. I tried all combinations that come to my mind, but when i clicked the read button my application was ended forcefully :(

                                  mrjjM Offline
                                  mrjjM Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on last edited by mrjj
                                  #19

                                  @suslucoder
                                  Ok
                                  You want it like

                                  MainWindow::MainWindow(QWidget *parent)
                                      : QMainWindow(parent)
                                      , ui(new Ui::MainWindow)
                                  {
                                      ui->setupUi(this);
                                  
                                      QTimer *timer = new QTimer(this);
                                      connect(timer, SIGNAL(timeout()), SLOT(Timer_Slot()));   // NOTE  new slot for timer    
                                  }
                                  
                                  // new slot for timer..  also put in .h under public slots:
                                  void MainWindow::Timer_Slot() {
                                      QString line = allLines[curIndex];
                                      ui->plainTextEdit->setPlainText(line);
                                      if (curIndex < allLines.size() - 1 ) {
                                          curIndex++;
                                      }    
                                  }
                                  
                                  void MainWindow::on_pushButton_clicked()  //read
                                  {
                                  
                                      QFile file("C:/Users/ilknu/Documents/QFileDemo/abc.txt");
                                      if (file.open(QIODevice::ReadOnly)) {
                                          QTextStream in (&file);
                                          while (!in.atEnd()) {
                                              QString line = in.readLine();
                                              allLines.append(line);
                                  
                                          }
                                      }
                                      file.close();
                                      curIndex=0; // make sure we start from start
                                      timer->start(20000); // we have read the lines, start timer
                                  }
                                  
                                  
                                  D 1 Reply Last reply
                                  1
                                  • mrjjM mrjj

                                    @suslucoder
                                    Ok
                                    You want it like

                                    MainWindow::MainWindow(QWidget *parent)
                                        : QMainWindow(parent)
                                        , ui(new Ui::MainWindow)
                                    {
                                        ui->setupUi(this);
                                    
                                        QTimer *timer = new QTimer(this);
                                        connect(timer, SIGNAL(timeout()), SLOT(Timer_Slot()));   // NOTE  new slot for timer    
                                    }
                                    
                                    // new slot for timer..  also put in .h under public slots:
                                    void MainWindow::Timer_Slot() {
                                        QString line = allLines[curIndex];
                                        ui->plainTextEdit->setPlainText(line);
                                        if (curIndex < allLines.size() - 1 ) {
                                            curIndex++;
                                        }    
                                    }
                                    
                                    void MainWindow::on_pushButton_clicked()  //read
                                    {
                                    
                                        QFile file("C:/Users/ilknu/Documents/QFileDemo/abc.txt");
                                        if (file.open(QIODevice::ReadOnly)) {
                                            QTextStream in (&file);
                                            while (!in.atEnd()) {
                                                QString line = in.readLine();
                                                allLines.append(line);
                                    
                                            }
                                        }
                                        file.close();
                                        curIndex=0; // make sure we start from start
                                        timer->start(20000); // we have read the lines, start timer
                                    }
                                    
                                    
                                    D Offline
                                    D Offline
                                    deleted286
                                    wrote on last edited by
                                    #20

                                    @mrjj It works. Thank you for your help.

                                    Pablo J. RoginaP 1 Reply Last reply
                                    0
                                    • D deleted286

                                      @mrjj It works. Thank you for your help.

                                      Pablo J. RoginaP Offline
                                      Pablo J. RoginaP Offline
                                      Pablo J. Rogina
                                      wrote on last edited by
                                      #21

                                      @suslucoder said in Windows not responding on reading file from txt:

                                      It works

                                      so please don't forget to mark your post as solved!

                                      Upvote the answer(s) that helped you solve the issue
                                      Use "Topic Tools" button to mark your post as Solved
                                      Add screenshots via postimage.org
                                      Don't ask support requests via chat/PM. Please use the forum so others can benefit from the solution in the future

                                      1 Reply Last reply
                                      1

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt Extensions
                                      • Unsolved