c++ - QFilesystemModel to display files only -


i have requirement display file selection dialogue. can't use qfiledialog need restrict user access file system. created subclass of qdialog has 2 qtreeviews; first 1 displaying directories , second 1 displaying files only. have 2 qfilesystemmodels serve content these views, of directory listing model working expected, not file list model. file list model/view not showing files, showing files parent directory , previous directory.

how display files directory selected in first (directory tree) view?

following code snippet tried.

filedialogue1::filedialogue1(const qstringlist& locs, qwidget* prnt)     : qdialog(prnt) {     qhboxlayout* hlayout = new qhboxlayout(this);     m_splitter = new qsplitter(this);     m_dir_view = new qtreeview(m_splitter);     m_dir_model = new qfilesystemmodel(m_dir_view);     m_dir_model->setfilter(qdir::nodotanddotdot | qdir::alldirs);     m_dir_view->setmodel(m_dir_model);     connect(m_dir_view, signal(clicked(qmodelindex)), slot(loadfilelist(qmodelindex)));     m_file_view = new qtreeview(m_splitter);     m_file_model = new filesystemmodel(m_file_view);     m_file_model->setfilter(qdir::nodotanddotdot | qdir::files);     m_file_view->setmodel(m_file_model);      // restrict user selection     qgroupbox* locs_gb = new qgroupbox(tr("available locations"), this);     qvboxlayout* vlayout = new qvboxlayout(locs_gb);     qsignalmapper* mapper = new qsignalmapper(locs_gb);     connect(mapper, signal(mapped(qstring)), slot(changelocation(qstring)));     foreach (const qstring& loc, locs)     {         qradiobutton* radio = new qradiobutton(loc, locs_gb);         vlayout->addwidget(radio, 0, qt::aligntop | qt::alignleft);         connect(radio, signal(clicked()), mapper, slot(map()));         mapper->setmapping(radio, loc);     }     vlayout->addstretch(1);      hlayout->addwidget(locs_gb, 0, qt::alignleft);     hlayout->addwidget(m_splitter);      setminimumsize(min_size); }   void filedialogue1::changelocation(const qstring& path) {             m_dir_view->setrootindex(m_dir_model->setrootpath(path)); }      void filedialogue1::loadfilelist(const qmodelindex& idx) {             const qstring path(m_dir_model->fileinfo(idx).absolutepath());     m_file_view->setrootindex(m_file_model->setrootpath(path));         } 

thanks in advance.

i believe problem have when see no files due way set filter flags qfilesystemdialog: -

m_file_model->setfilter(qdir::nodotanddotdot | qdir::files); 

if @ of possible options filters includes flags such these: -

  • qdir::readable (show readable files)
  • qdir::writable (show writable files)
  • dir::executable (show executable files)
  • etc.

by setting qdir::nodotanddotdot , qdir::files you're eliminating of options.

instead, set filters want based on default set. example: -

m_file_model->setfilter(m_file_model->filter() | qdir::nodotanddotdot | ~qdir::dirs); 

which ensure '.' , '..' paths directories excluded.

in example, modify current model's filters , use not flag (~) exclude directories in case.


Comments

Popular posts from this blog

linux - Does gcc have any options to add version info in ELF binary file? -

java - Are there any classes that implement javax.persistence.Parameter<T>? -

android - send complex objects as post php java -