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. [SOLVED] How to see if file is selected in list view with QFileSystemModel
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] How to see if file is selected in list view with QFileSystemModel

Scheduled Pinned Locked Moved General and Desktop
qfilesystemmodeqlistviewqtreeview
14 Posts 3 Posters 8.5k Views 1 Watching
  • 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.
  • R raf924

    @mar0029 Get the index with the index()method : http://doc.qt.io/qt-5/qfilesystemmodel.html#index-1 I think

    M Offline
    M Offline
    mar0029
    wrote on last edited by
    #5

    @raf924

    Thank you for your reply!

    I am able to use "myModelIndex.isValid()" as a boolean value now but only if I set

    myModelIndex = myModel->index(myFilePath,0)

    where in index(), QString myFilePath = "C:/" and the integer is an arbitrary column value.
    I know I need myFilePath to be that of the index value in my signal function void QAbstractItemView::clicked(const QModelIndex & index). Question is, how do I go about doing that?

    R 1 Reply Last reply
    0
    • M mar0029

      @raf924

      Thank you for your reply!

      I am able to use "myModelIndex.isValid()" as a boolean value now but only if I set

      myModelIndex = myModel->index(myFilePath,0)

      where in index(), QString myFilePath = "C:/" and the integer is an arbitrary column value.
      I know I need myFilePath to be that of the index value in my signal function void QAbstractItemView::clicked(const QModelIndex & index). Question is, how do I go about doing that?

      R Offline
      R Offline
      raf924
      wrote on last edited by
      #6

      @mar0029 I'm not sure what you mean. This ?

      QString QFileSystemModel::filePath(const QModelIndex & index) const
      Returns the path of the item stored in the model under the index given.
      
      M 1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #7

        Before going further, can you post the code you are currently using ? That way we are all on the same page about what you are trying to achieve and how.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • R raf924

          @mar0029 I'm not sure what you mean. This ?

          QString QFileSystemModel::filePath(const QModelIndex & index) const
          Returns the path of the item stored in the model under the index given.
          
          M Offline
          M Offline
          mar0029
          wrote on last edited by mar0029
          #8

          @raf924
          @SGaist
          Here are the two functions of concern.

          void MainWindow::on_dirView_clicked(const QModelIndex &index)
          {
               QString sPath = dirModel->fileInfo(index).absoluteFilePath();
               ui->listView->setRootIndex(listModel->setRootPath(sPath));
          }
          
          void MainWindow::loadButton()
          {
          	//index = new QModelIndex(this);
          
          	//qDebug() << "Load Button Test" << endl; //testing purposes.
          
             // index = new QModelIndex(this);
          
           	//QString sPath = listModel->filePath(index);
          
          	QString sPath = "C:/";
          
          	QModelIndex test = listModel->index(sPath,0);
          
                if (test.isValid() == false)
              {
                  QDialog* loadMessage = new QDialog;
                  loadMessage->setFixedSize(250,150);
          
                  QVBoxLayout *vertLayout = new QVBoxLayout;
          
                  QLabel *messageLabel = new QLabel("No File was selected. Please select a .dat file.");
                  
                  QPushButton *messageOKButton = new QPushButton("OK");
          
                  vertLayout->addWidget(messageLabel);
                  vertLayout->addWidget(messageOKButton);
          
                  loadMessage->setLayout(vertLayout);
                  connect(messageOKButton, SIGNAL(clicked(bool)), loadMessage, SLOT(accept()));
                  loadMessage->exec();
              }
                else
                {
                    ui->mpfTAB->setCurrentIndex(1);
                }
          }
          

          aside: Thank you for your help!!
          edit(s): figured out formatting

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #9

            You have a memory leak, you're not deleting loadMessage.

            So if I understand you correctly, when you call loadButton, you would like to act on the currently selected item from listModel, right ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            M 1 Reply Last reply
            0
            • SGaistS SGaist

              You have a memory leak, you're not deleting loadMessage.

              So if I understand you correctly, when you call loadButton, you would like to act on the currently selected item from listModel, right ?

              M Offline
              M Offline
              mar0029
              wrote on last edited by
              #10

              @SGaist

              Whoops. I'll do a

              connect(loadMessage, SIGNAL(finished(int)), loadMessage, SLOT(deleteLater)));
              

              to clean up my leak.

              That is correct. Really, there should never be an invalid file type because I specified the file type in MainWindow with listModel->setNameFilters(matFilters); where matFilters is specified as .dat. So all I really need to see is if any selection has been made in listView.

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #11

                Then you use QListView::selectedIndexes to retrieve the current selection and work with that directly

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                M 1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #12

                  By the way setting the Qt::WA_DeleteOnClose attribute on the widget will be cleaner

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  1
                  • SGaistS SGaist

                    Then you use QListView::selectedIndexes to retrieve the current selection and work with that directly

                    M Offline
                    M Offline
                    mar0029
                    wrote on last edited by
                    #13

                    @SGaist
                    Thank you so much for your replies.
                    After much ado, we've solved the problem!

                    I had to do

                    QModelIndexList test = ui->listView->selectionModel()->selectedIndexes();
                    if(test.empty() == true)
                    {
                    ...
                    }
                    

                    Thank you again everyone!

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #14

                      You're welcome !

                      By the way, now you can use the "Topic Tool" button to mark the thread as solved, it keeps the things cleaner :)

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0

                      • Login

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