关于QSqlTableModel::setFilter QSqlTableModel::setFilter的例子很少,我尝试了很多方法使用它,但都失败了: //QString sqlstringqqq = QString("select * from alarmInfoTable where 1=1 order by rowid asc Limit%1,20;“).arg(BeginIDqqq);//QString sqlstringqqq = QString("select * from alarmInfoTable where 1=1 limit %1,20;").arg(beginIDqqq);
//QString sqlstringqqq = QString("SELECT * FROM alarmInfoTable LIMIT 3,10;");
//QString sqlstringqqq = QString("SELECT * FROM alarmInfoTable LIMIT 3,10");
QString sqlstringqqq = QString("select * from alarmInfoTable");
//ptableModel->setFilter("1=1 limit 2,10;");
//ptableModel->setFilter("limit 2,10;");
//ptableModel->setFilter("1=1 ORDER BY msgID ASC");// ptableModel->setFilter("1=1 limit 3,7;");ptableModel->setFilter("msgID>30;");
qDebug()<<" filter: "<< ptableModel->filter();
//ptableModel->setFilter(sqlstringqqq);
ptableModel->select();这个方法行不行?有没有可以运行的例子?
发布于 2021-06-15 20:58:06
在setFilter()中,您只能使用 WHERE子句,并且一次只能使用一个筛选器,因此请将所有筛选器放入一个字符串中或使用QSortFilterProxyModel子类。
setFilter()示例
void YourModel::acceptFilter(const QString &value, bool useFilterByDate, bool useDogFilter)
{
QString whereStr = "col_name = %1";
if(useFilterByDate)
whereStr += " AND DATE(date_col_name) BETWEEN '2021-01-01' AND '2021-06-06'";
if(useDogFilter)
whereStr += " AND col_name2 = 'dog'";
setFilter(whereStr.arg(value));
}如果您想使用LIMIT,您必须覆盖selectStatement()并将您的限制附加到查询字符串中,如下所示:
QString selectStatement() const
{
QString qStr = QSqlTableModel::selectStatement();
qStr += " LIMIT 100";
return qStr;
}https://stackoverflow.com/questions/67983915
复制相似问题