首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于QSqlTableModel::setFilter

关于QSqlTableModel::setFilter
EN

Stack Overflow用户
提问于 2021-06-15 17:48:05
回答 1查看 56关注 0票数 0

关于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);

代码语言:javascript
复制
//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;");

代码语言:javascript
复制
qDebug()<<" filter: "<< ptableModel->filter();


//ptableModel->setFilter(sqlstringqqq);
ptableModel->select();

这个方法行不行?有没有可以运行的例子?

EN

回答 1

Stack Overflow用户

发布于 2021-06-15 20:58:06

setFilter()中,您只能使用 WHERE子句,并且一次只能使用一个筛选器,因此请将所有筛选器放入一个字符串中或使用QSortFilterProxyModel子类。

setFilter()示例

代码语言:javascript
复制
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()并将您的限制附加到查询字符串中,如下所示:

代码语言:javascript
复制
QString selectStatement() const
{
    QString qStr = QSqlTableModel::selectStatement();
    qStr += " LIMIT 100";
    return qStr;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67983915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档