【问题标题】:Filtering query by QLineEdit and updating QSqlQueryModel通过 QLineEdit 过滤查询并更新 QSqlQueryModel
【发布时间】:2019-01-08 03:20:31
【问题描述】:

我有一个 lineExdit 和一个 tableView,我想根据在 lineEdit 中键入文本来实时更新 tableView。

void updateTableView(QString *st)
{
    QSqlQuery * qry = new QSqlQuery(mydb);

    qry->prepare("select * from Poems where Title like ?%");
    qry->addBindValue(st);
    qry->exec();

【问题讨论】:

  • 您应该更新模型以使其执行您的查询并在 tableView 中返回结果。你的表视图应该有一个 QSqlQueryModel。
  • 我已经有 QSqlQueryModel * modal = new QSqlQueryModel(); ui->tableView->setModel(modal);我不知道如何发送 QString st
  • 只需替换现有模型上的查询即可。不要打电话给qry->exec();
  • QSqlQueryModel* pModel = dynamic_cast(ui->tableView->model()); if (pModel) { pModel->setQuery(*qry);删除qry;}
  • 如何将 lineEdit 与 QSqlQueryModel 一起使用。我应该通过 textChanget 方法传递查询字符串吗?请用完整的代码写出答案。我很新手。

标签: c++ qt sqlite qt5 qsqlquerymodel


【解决方案1】:

你在不必要的时候滥用指针,例如QSqlQuery正在使用动态内存创建它,而你没有消除它,与QString一样。

假设QTableView 模型是QSqlQueryModel,那么您应该执行以下操作:

...
// constructor
    connect(your_le, &QLineEdit::textChanged, this, &YourClass::updateTableView);
...

void updateTableView(const QString & st)
{
    QSqlQuery query(mydb);
    query.prepare("select * from Poems where Title like ?");
    query.addBindValue(QString("%1%").arg(st));
    query.exec();
    your_QSqlQueryModel->setQuery(query);
}

【讨论】:

  • 非常感谢帮助。这样可行。乞求和中间哪个通配符?
  • @BehruzMontazeri %1属于QString::arg(),第二个是LIKE自己的,如果我的回答对你有帮助别忘了标记为正确,如果你不知道怎么做复习tour,这是最好的感谢方式。
  • 我打算在我对问题的评论中提到不需要动态分配查询。
猜你喜欢
  • 2014-04-24
  • 2016-04-20
  • 2017-07-18
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2018-06-13
  • 2019-08-16
  • 1970-01-01
相关资源
最近更新 更多