Название: Qt tableView: удалить строку Отправлено: DEATH от Июнь 16, 2011, 23:25 Здравствуйте.
Обгуглил, ничего не нашел. Прошу о помощи. Пишу программу использующую БД, субд взял SQLite. Выборка в tableView делается с помощью QSqlQueryModel: Код: QSqlQueryModel * model = new QSqlQueryModel(); Вопрос: как удалить с tableView выбранные записи через SQL? Может как то можно получить информацию об этих выбранных полях, что бы достать id и по нему уже удалить/редактировать. Для разделения информация/поиск/... использщуется tabWidget, т.е. для удаления ничего в принципе не надо, а для редактирования нужно выбранные поля передать на другую вкладку, и там уже в полях информацию выбранную вывести. Помогите, будьте добры =) Спасибо. Название: Re: Qt tableView: удалить строку Отправлено: sobr_vamp от Июнь 16, 2011, 23:40 Цитировать как удалить с tableView выбранные записи через SQL? Не очень понятно, что вы имеете в виду.Может это поможет? http://www.prog.org.ru/topic_12455_0.html (http://www.prog.org.ru/topic_12455_0.html) Название: Re: Qt tableView: удалить строку Отправлено: DEATH от Июнь 16, 2011, 23:44 Код
Так я делал, ничего не получилось. А я имею ввиду следующее: Есть какие то записи: ... / ... / ... Вася / Физика / 2 Петя / математика / 3 Я выбрал одно из полей (или несколько) и мне их нужно удалить. НО, записи выбираются с помощью SQL, через QSqlQueryModel. Как получить информацию о выбранном(ых) поле. И удалить. Ну или отредактировать. Название: Re: Qt tableView: удалить строку Отправлено: sobr_vamp от Июнь 16, 2011, 23:52 Я выбрал одно из полей (или несколько) и мне их нужно удалить. НО, записи выбираются с помощью SQL, через QSqlQueryModel. Как получить информацию о выбранном(ых) поле. И удалить. Ну или отредактировать. Давайте проясним. У вас есть QTableView и для него определена модель. В этой модели есть строки и столбцы и их можно выделить. Вы их хотите удалить? Те строки, которые пользователь выделил мышкой? Если да, то приведённый код должен работать и SQL тут вообще ни при чем. Если нет, то что тогда такое "поля"? И откуда вы их хотите удалить? Название: Re: Qt tableView: удалить строку Отправлено: DEATH от Июнь 16, 2011, 23:54 Именно так. Но ведь данные берутся из БД. И удалить их нужно не только с самой таблицы, но и с БД.
Вот код выборки: Код
Как то так. Название: Re: Qt tableView: удалить строку Отправлено: DEATH от Июнь 17, 2011, 00:06 Код На выходе 1, сообственно так и должно быть, выбрал 1 запись. А дальше тишина. Не удаляется ничего =( Название: Re: Qt tableView: удалить строку Отправлено: sobr_vamp от Июнь 17, 2011, 00:08 Из документации:
void QSqlQueryModel::setQuery ( const QSqlQuery & query ) Resets the model and sets the data provider to be the given query. Если мне не изменяет мой английский, то модель поменяется в соответсвии с запросом. Значит напрямую удалять из QTableView не надо. 1. Загоняете номера выделенных строк в какой-нибудь QList 2. Пишете DELETE запрос с условием "... WHERE attr_name IN (" + номера_строк_через_зпт + ");" 3. В результате строки из базы удалятся, модель обновится и в QTableView будет всё здорово. Но это лишь моя догадка. Пробуйте ;) Название: Re: Qt tableView: удалить строку Отправлено: DEATH от Июнь 17, 2011, 00:14 1. Загоняете номера выделенных строк в какой-нибудь QList
Сообственно меня интересует как их получить? А дальше никаких проблем =) Название: Re: Qt tableView: удалить строку Отправлено: sobr_vamp от Июнь 17, 2011, 00:22 http://doc.qt.nokia.com/latest/qabstractitemview.html#selectedIndexes
Использовать как-то так: Код: QModelIndexList indexes = ui.tableView->selectionModel()->selection().indexes(); Название: Re: Qt tableView: удалить строку Отправлено: DEATH от Июнь 17, 2011, 00:28 Я в ответ получу индексы? Индексы узнать это одно... мне нужно узнать само значение уже инфы, к примеру имя Вася. или предмет, или оценку...
Название: Re: Qt tableView: удалить строку Отправлено: sobr_vamp от Июнь 17, 2011, 00:41 Мне кажется, вы всё-таки плохо гуглите =))
http://doc.qt.nokia.com/latest/qitemselectionmodel.html#currentIndex http://doc.qt.nokia.com/latest/qmodelindex.html#row http://doc.qt.nokia.com/latest/qmodelindex.html#column Название: Re: Qt tableView: удалить строку Отправлено: DEATH от Июнь 17, 2011, 00:46 Мне кажется что я с этим курсовым скоро свихнусь. Можно маленький пример?
Я нагуглил: Код
Как то так. Но ничего не получается, куча ошибок %) Название: Re: Qt tableView: удалить строку Отправлено: DEATH от Июнь 17, 2011, 00:54 Ура, получилось, просто не проинклудил кой чо)
Код
Ещё небольшой вопрос, слева в самом tableView выводится нумерация строк. Её можно отрубить? Название: Re: Qt tableView: удалить строку Отправлено: DEATH от Июнь 17, 2011, 03:42 Я помоему спать хочу)))
Код
Вообщем то все открывается и сохраняется, но к сожалению с исходным размером =( Как правильно? И ещё, как узнать текущую папку? С которой запущена прога. Просто в ней надо будет хранить изображения, в подпапке. P.S. Лаг койта вздесь, поредачил месагу и в теге [ code ] уплыл рус. текст =( Название: Re: Qt tableView: удалить строку Отправлено: pokidoff от Июнь 17, 2011, 07:25 Вообще QSqlQueryModel - readOnly модель. Чтобы редактировать,удалять и вставлять строки надо пользоваться как минимум QSqlTableModel.
PS: почитай про метод QSqlTableModel::removeRows Название: Re: Qt tableView: удалить строку Отправлено: DenisKh001 от Июнь 17, 2011, 18:44 пишу код: ui->tableView->model()->removeRow(ui->tableView->currentIndex(),QModelIndex());
естественно жалуется на "QModelIndex()" - что это такое? откуда брать, как правильно написать и зачем она нужна? Название: Re: Qt tableView: удалить строку Отправлено: sobr_vamp от Июнь 17, 2011, 20:30 пишу код: ui->tableView->model()->removeRow(ui->tableView->currentIndex(),QModelIndex()); естественно жалуется на "QModelIndex()" - что это такое? откуда брать, как правильно написать и зачем она нужна? Читайте тут внимательно http://doc.qt.nokia.com/latest/qabstractitemmodel.html#removeRow (http://doc.qt.nokia.com/latest/qabstractitemmodel.html#removeRow) Removes the given row from the child items of the parent specified. Думаю можно наприсать просто ...->removeRow(ui->tableView->currentIndex()) Название: Re: Qt tableView: удалить строку Отправлено: DenisKh001 от Июнь 17, 2011, 21:12 Разобрался, над писать так:
QModelIndex idIndex = ui->tableView->selectionModel()->selectedRows().at(0); model->removeRow(idIndex.row()); // удаляем ПЕРВУЮ ВЫДЕЛЕННУЮ позицию. или model->removeRow(ui->tableView->currentIndex().row()); // удаляем ТЕКУЩУЮ позицию. |