Russian Qt Forum

Qt => Вопросы новичков => Тема начата: diagnosefiz от Июнь 01, 2017, 11:43



Название: Добавление и удаление строк из TableView.
Отправлено: diagnosefiz от Июнь 01, 2017, 11:43
Удаляю строку из QTableView с помощью запроса для бд postgres, но она не удаляется из таблицы. О том что она удалилась, мы узнаем только по следующему открытию талицы. Как сделать обновление вида таблицы по нажатию кнопки "'Delete"? Слот на нажатие клавиши "Delete":
Код:
void DialogNewColumn::on_pushButton_2_clicked()
{
    QSqlQuery query;
    QString table = tables->currentText();
    QString nameColumn = ui->tableView->model()->data(ui->tableView->currentIndex()).toString();
    qDebug() << ui->tableView->model()->data(ui->tableView->currentIndex());
    QString str = "ALTER TABLE \"" + table +  "\" DROP COLUMN \"" +  nameColumn +  "\" ";;

    query.exec(str);
}


Название: Re: Добавление и удаление строк из TableView.
Отправлено: gil9red от Июнь 01, 2017, 12:08
А какая модель у таблицы?


Название: Re: Добавление и удаление строк из TableView.
Отправлено: diagnosefiz от Июнь 01, 2017, 12:14
А какая модель у таблицы?
QStandardItemModel


Название: Re: Добавление и удаление строк из TableView.
Отправлено: gil9red от Июнь 01, 2017, 12:46
Понятно, а открытие таблицы это новое заполнение QStandardItemModel из запроса к базе? Если данных мало, то можно после удаления у модели вручную удалить. Из ui->tableView->currentIndex() можно узнать индекс столбца

Я спрашивал про модель, потому что есть специальные модели для работы с базами, например QSqlTableModel  (http://doc.qt.io/qt-5/qsqltablemodel.html)


Название: Re: Добавление и удаление строк из TableView.
Отправлено: diagnosefiz от Июнь 01, 2017, 13:04
Понятно, а открытие таблицы это новое заполнение QStandardItemModel из запроса к базе? Если данных мало, то можно после удаления у модели вручную удалить. Из ui->tableView->currentIndex() можно узнать индекс столбца

Я спрашивал про модель, потому что есть специальные модели для работы с базами, например QSqlTableModel  (http://doc.qt.io/qt-5/qsqltablemodel.html)
Это мой первый проект и почти все запросы реализованы на перегрузке модели. Т.е. каждый новый запрос - это перезагрузка всей модели.((понимаю, что криво сделано. Есть ли способ догружать данные в существующую модель?


Название: Re: Добавление и удаление строк из TableView.
Отправлено: gil9red от Июнь 01, 2017, 13:16
Есть ли способ догружать данные в существующую модель?

Конечно, работайте с QStandardItemModel. Добавляете в модель новые данные, она сообщит таблице о них и таблица обновится


Название: Re: Добавление и удаление строк из TableView.
Отправлено: diagnosefiz от Июнь 01, 2017, 13:44
(http://cdn1.savepice.ru/uploads/2017/6/1/b1ad3615ab806379e434fb5a88733ba2-full.png)
Есть ли способ догружать данные в существующую модель?

Конечно, работайте с QStandardItemModel. Добавляете в модель новые данные, она сообщит таблице о них и таблица обновится
В эту ячейку нужно поместить combobox и чтобы он появлялся только когда появляется новая пустая строка для ввода данных. я читала что это можно реализовать с помощью делегатов на combobox, но так и не разобралась. Есть ли другой способ?


Название: Re: Добавление и удаление строк из TableView.
Отправлено: diagnosefiz от Июнь 01, 2017, 14:27
Понятно, а открытие таблицы это новое заполнение QStandardItemModel из запроса к базе? Если данных мало, то можно после удаления у модели вручную удалить. Из ui->tableView->currentIndex() можно узнать индекс столбца

Я спрашивал про модель, потому что есть специальные модели для работы с базами, например QSqlTableModel  (http://doc.qt.io/qt-5/qsqltablemodel.html)
 
Код:
   QModelIndex string = ui->tableView->currentIndex().row();
   model->removeRows(string, 1);
Верно ли я вас поняла?


Название: Re: Добавление и удаление строк из TableView.
Отправлено: gil9red от Июнь 01, 2017, 14:33
Тогда уж:
Код
C++ (Qt)
int row = ui->tableView->currentIndex().row();
model->removeRow(row);
 


Название: Re: Добавление и удаление строк из TableView.
Отправлено: diagnosefiz от Июнь 01, 2017, 14:35
Тогда уж:
Код
C++ (Qt)
int row = ui->tableView->currentIndex().row();
model->removeRow(row);
 
Спасибо большое) получилось.