Фильтрация запроса с помощью QLineEdit и обновление QSqlQueryModel

У меня есть lineExdit и tableView, я хочу, чтобы база tableView обновлялась в реальном времени при вводе текста в lineEdit.

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

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

person behruz montazeri    schedule 31.07.2018    source источник
comment
Вы должны обновить модель, чтобы она выполнила ваш запрос и вернула результат в tableView. Ваше табличное представление должно иметь QSqlQueryModel.   -  person drescherjm    schedule 31.07.2018
comment
У меня уже есть QSqlQueryModel * modal = new QSqlQueryModel(); ui-›tableView-›setModel(modal); я не знаю, как отправить QString st   -  person behruz montazeri    schedule 31.07.2018
comment
Просто замените запрос на существующую модель. Не звони qry->exec();   -  person drescherjm    schedule 31.07.2018
comment
QSqlQueryModel* pModel = dynamic_cast‹QSqlQueryModel*›(ui-›tableView-›model()); if (pModel) { pModel->setQuery(*qry); удалить запрос;}   -  person drescherjm    schedule 31.07.2018
comment
Как использовать lineEdit с QSqlQueryModel. Должен ли я передать строку запроса с помощью метода textChanget? Пожалуйста, напишите ответ с полным кодом. Я очень новичок.   -  person behruz montazeri    schedule 31.07.2018
comment
@BehruzMontazeri Проверьте мой ответ, я пытался дать вам решение, если оно не работает, покажите более подробно свой класс, чтобы иметь возможность правильно его адаптировать, а также не злоупотребляйте динамической памятью.   -  person eyllanesc    schedule 31.07.2018
comment
Я не понимаю, пожалуйста, объясните злоупотребление динамической памятью. Может дайте ссылку на изучение.   -  person behruz montazeri    schedule 31.07.2018


Ответы (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);
}
person eyllanesc    schedule 31.07.2018
comment
Спасибо, отличная помощь. Это работает. Какая дикая карта для попрошайничества и среднего? - person behruz montazeri; 31.07.2018
comment
@BehruzMontazeri %1 принадлежит QString::arg(), а второй принадлежит LIKE, если мой ответ поможет вам, не забудьте отметить его как правильный, если вы не знаете, как это сделать, просмотрите тур Это лучший способ отблагодарить. - person eyllanesc; 31.07.2018
comment
Я собирался упомянуть об отсутствии необходимости в динамическом распределении запросов в своем комментарии к этому вопросу. - person drescherjm; 31.07.2018