Hi there, I have a QListView that displays pdf files from a Directory. To achieve this, I linked the QListView to the QFileSystemModel. My problem is that I need to be able to search for a file in the QListView using a pattern string, so I employed the use of a QSortFilterProxyModel. The QSortFilterProxyModel works fine except that it doesn't filter when I search for a particular file. Please see my code below.
MainWindow
::MainWindow(QWidget *parent
) : ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui
->listView_Main
->setFlow
(QListView::TopToBottom);
ui
->listView_Main
->setViewMode
(QListView::ListMode);
ui->listView_Main->setWrapping(true);
ui
->listView_Main
->setResizeMode
(QListView::Adjust);
ui->listView_Main->setUniformItemSizes(true);
QString root_path
= "C:/Users/C5248134/Desktop/Projects/build-Ithala-Desktop_Qt_5_7_0_MSVC2015_64bit-Debug/Documents/";
f_model = new QFileSystemModel(this);
f_model
->setFilter
(QDir::Files);
proxyModel->setSourceModel(f_model);
proxyModel->setFilterRole(Qt::DisplayRole | Qt::DecorationRole);
if(f_model->rootDirectory().exists())
qDebug() << "Dir Found" <<endl;
else
qDebug() << "Dir not found" <<endl;
ui->listView_Main->setModel(proxyModel);
ui->listView_Main->setRootIndex(proxyModel->mapFromSource(f_model->setRootPath(root_path)));
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->listView_Main->setFlow(QListView::TopToBottom);
ui->listView_Main->setViewMode(QListView::ListMode);
ui->listView_Main->setWrapping(true);
ui->listView_Main->setResizeMode(QListView::Adjust);
ui->listView_Main->setUniformItemSizes(true);
QString root_path = "C:/Users/C5248134/Desktop/Projects/build-Ithala-Desktop_Qt_5_7_0_MSVC2015_64bit-Debug/Documents/";
proxyModel = new QSortFilterProxyModel(this);
f_model = new QFileSystemModel(this);
f_model->setFilter(QDir::Files);
proxyModel->setSourceModel(f_model);
proxyModel->setFilterRole(Qt::DisplayRole | Qt::DecorationRole);
if(f_model->rootDirectory().exists())
qDebug() << "Dir Found" <<endl;
else
qDebug() << "Dir not found" <<endl;
ui->listView_Main->setModel(proxyModel);
ui->listView_Main->setRootIndex(proxyModel->mapFromSource(f_model->setRootPath(root_path)));
}
To copy to clipboard, switch view to plain text mode
Search button clicked slot.
void MainWindow::on_btnSearch_clicked()
{
QString patternStr
= ui
->leSearch
->text
();
QFileInfoList fileInfoObj = f_model->rootDirectory().entryInfoList();
proxyModel->setFilterFixedString(patternStr);
//ui->listView_Main->setRootIndex();
}
void MainWindow::on_btnSearch_clicked()
{
QString patternStr = ui->leSearch->text();
QFileInfoList fileInfoObj = f_model->rootDirectory().entryInfoList();
proxyModel->setFilterFixedString(patternStr);
//ui->listView_Main->setRootIndex();
}
To copy to clipboard, switch view to plain text mode
When I type-in a search string and then click on the search button the entire QListView goes blank. Please see screenshots of how my app looks before and after I search for a file.
Beforescreen2.jpg AfterBlankPic.jpg
Bookmarks