Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    FindFiles without GUI

    General and Desktop
    4
    8
    3151
    Loading More Posts
    • 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.
    • N
      novaktamas last edited by

      I want to load all filename-strings of a directory.
      @
      QFileSystemModel *datafolder;
      ...
      datafolder= new QFileSystemModel;
      ...
      void MainWindow::LoadFiles() {
      connect(datafolder, SIGNAL(directoryLoaded (const QString & )), this, SLOT(LoadFilesOKSlot()));
      datafolder->setFilter(QDir::AllEntries);
      datafolder->setRootPath("d:/data"); //tested with lots of different paths..
      }
      void MainWindow::LoadFilesOKSlot() { //slot invoked when QFileSystemModel finished caching the files/dirs...
      int numRows, numCols, i, j;
      QString x;
      QModelIndex ndx= datafolder->index("d:/data"); //tested with lots of different paths..
      numRows = datafolder->rowCount(ndx);
      numCols = datafolder->columnCount(ndx); // <<< breakpoint here for checking the row/col values
      for (i= 0; i < numRows; ++i) {
      for (j= 0; j < numCols; ++j) {
      x= datafolder->data(index(i,j), Qt:: DisplayRole).toString(); // <<< breakpoint here for checking strings
      }
      }
      }
      @

      Code compiles and DOES something: numCols always set to 4, numRows usually 0 or 1. When there is a valuable row, then 1st column is for name, 2nd empty, 3rd is the type, 4th is the date...that's fine

      The problem is that any directory I set by
      @QModelIndex ndx= datafolder->index("d:/data");@
      I get only 1 valuable row, that is for the root of the actual drive, instead of e.g. "D:/data" folder content.
      Sometimes I get more rows (4 and 6 rows already "happened"), but all items are empty except the first row.

      If I connect QFileSystemModel to a QTreeView, everything is fine on the screen.
      How could I get all the filenames in a given directory?

      1 Reply Last reply Reply Quote 0
      • D
        DenisKormalev last edited by

        I suggest you use QDir class in your case.

        1 Reply Last reply Reply Quote 0
        • G
          goetz last edited by

          QFileSystemModel uses lazy loading. I suggest you call "canFetchMore() ":http://doc.trolltech.com/stable/qabstractitemmodel.html#canFetchMore and if that returns true call "fetchMore() ":http://doc.trolltech.com/stable/qabstractitemmodel.html#fetchMore

          http://www.catb.org/~esr/faqs/smart-questions.html

          1 Reply Last reply Reply Quote 0
          • D
            dangelog last edited by

            Why are you using QFileSystemModel instead of QDirIterator?

            Software Engineer
            KDAB (UK) Ltd., a KDAB Group company

            1 Reply Last reply Reply Quote 0
            • N
              novaktamas last edited by

              Thanks, Denis,
              I hoped that walking through subdirs would be easier with the QFileSystemModel, but QDir + "manual handling" of sub-directories seems to be proper. I just try to understand why the QFileSystemModel approach wasn't working :)

              1 Reply Last reply Reply Quote 0
              • N
                novaktamas last edited by

                [quote author="Volker" date="1295910280"]QFileSystemModel uses lazy loading. I suggest you call "canFetchMore() ":http://doc.trolltech.com/stable/qabstractitemmodel.html#canFetchMore and if that returns true call "fetchMore() ":http://doc.trolltech.com/stable/qabstractitemmodel.html#fetchMore[/quote]

                Originally after running setRootPath() I immediately called rowCount() --and got 0 or 1 row.
                When I have found in the doc's that it is in a seperate thread and directoryLoaded() signal is emitted by QFileSystemModel when reading/caching the whole filesystem is ready, I re-wrote the code into a slot function.
                It was suspicious that why is there a canFetchMore(), if slot called when all done ?

                1 Reply Last reply Reply Quote 0
                • G
                  goetz last edited by

                  [quote author="novaktamas" date="1295911687"]It was suspicious that why is there a canFetchMore(), if slot called when all done ?
                  [/quote]

                  This function is virtual in QAbstractItemModel and is reimplemented in QFileSystemModel. It is called when a branch in the tree view is opened that is not yet cached.

                  http://www.catb.org/~esr/faqs/smart-questions.html

                  1 Reply Last reply Reply Quote 0
                  • N
                    novaktamas last edited by

                    [quote author="peppe" date="1295910898"]Why are you using QFileSystemModel instead of QDirIterator?[/quote]

                    Thanks, Peppe,
                    that's the winning idea by now:)) I came from the direction of Borland's c++Builder, and QDirIterator is closest to the good old FindFirst/FindNext. I started flirting with Qt Creator 2 weeks ago, and it's hard to review the so many classes. Sometimes the real one can't be found...

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post