QSqlTableModel : SetQuery issue
-
I basically want to filter as I am entering route no in my lineedit. I have connected the lineedit valuechanged signal to a slot where I have written the above code.
If not this way then what is the way to do that? -
@Antweb Shouldn't you use
like
when using%
? I'm not sure why it is crashing but since you want some realtime filtering its better to use QSortFilterProxyModel here. Checkout the examples Qt installed directory on your system. -
I used like and the command is working if I call it in the constructor. But when I am calling in the slot connected to my valuechanged of lineedit it crashes. And I want to reduce the size of my table with each added character. I don't think that is possible with QSortFIlterProxyModel.
-
@Antweb OfCourse it is possible. You just have to re-implement filterAcceptsRow and put a condition as to what should be displayed. You have to just connect the textchanged signal to a slot where you will update the text using filterRegExp. Check the filtering subtopic for more details.
-
Done. Thank you.
-
I am able to filter my QSqlTableModel with the help of text in lineedit. If simultaneously i want to filter the same table from selection in a combobox. How can i do that. Will I need a separate QSortFIlterProxyModel? Also i want the text selected from combobox to filter this QSqlTableModel on the basis of another Column.
This is my code right now:
QSqlTableModel *model = new QSqlTableModel(this, db); model->setTable("path_master_table"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); model->select(); QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); proxyModel->setSourceModel(model); ui->tableView->setModel(proxyModel); connect(ui->lineEdit, SIGNAL(textChanged(QString)), proxyModel, SLOT(setFilterRegExp(QString)));
Thanks.
-
If simultaneously i want to filter the same table from selection in a combobox. How can i do that. Will I need a separate QSortFIlterProxyModel?
No. Separate
QSortFIlterProxyModel
is not needed. Connect the signal currentIndexChanged which sends aQString
to the slot where you can updatefilterRegExp
with this text as done earlier.Also i want the text selected from combobox to filter this QSqlTableModel on the basis of another Column.
In that case you will need to override filterAcceptsColumn.
-
On what basis should i do the segregation while overriding.
Sorry, I am unable to figure out! -
@Antweb That will need subclassing. Filtering by column can also be done by filterKeyColumn.
Here is a complete example. It is forQTreeView
but can also be done forQTableView
is the same way. -
I was able to do it with some simple signals and slots concept by resetting setFilterKeyColumn.
Complicating things further, is there a way to filter rows using the lineedit which have already been filtered once by the combobox?
Because right now it goes back to the original table and then filters! -
@Antweb Unfortunately I too do not know how to filter a already filtered list. May be someone else can answer this question. You can start a new topic explain this requirement.