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
Post a Comment