Russian Qt Forum
Март 29, 2024, 13:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Добавление и удаление строк из TableView.  (Прочитано 7846 раз)
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);
}
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июнь 01, 2017, 12:08 »

А какая модель у таблицы?
Записан

diagnosefiz
Гость
« Ответ #2 : Июнь 01, 2017, 12:14 »

А какая модель у таблицы?
QStandardItemModel
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Июнь 01, 2017, 12:46 »

Понятно, а открытие таблицы это новое заполнение QStandardItemModel из запроса к базе? Если данных мало, то можно после удаления у модели вручную удалить. Из ui->tableView->currentIndex() можно узнать индекс столбца

Я спрашивал про модель, потому что есть специальные модели для работы с базами, например QSqlTableModel
Записан

diagnosefiz
Гость
« Ответ #4 : Июнь 01, 2017, 13:04 »

Понятно, а открытие таблицы это новое заполнение QStandardItemModel из запроса к базе? Если данных мало, то можно после удаления у модели вручную удалить. Из ui->tableView->currentIndex() можно узнать индекс столбца

Я спрашивал про модель, потому что есть специальные модели для работы с базами, например QSqlTableModel
Это мой первый проект и почти все запросы реализованы на перегрузке модели. Т.е. каждый новый запрос - это перезагрузка всей модели.((понимаю, что криво сделано. Есть ли способ догружать данные в существующую модель?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июнь 01, 2017, 13:16 »

Есть ли способ догружать данные в существующую модель?

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

diagnosefiz
Гость
« Ответ #6 : Июнь 01, 2017, 13:44 »

Есть ли способ догружать данные в существующую модель?

Конечно, работайте с QStandardItemModel. Добавляете в модель новые данные, она сообщит таблице о них и таблица обновится
В эту ячейку нужно поместить combobox и чтобы он появлялся только когда появляется новая пустая строка для ввода данных. я читала что это можно реализовать с помощью делегатов на combobox, но так и не разобралась. Есть ли другой способ?
Записан
diagnosefiz
Гость
« Ответ #7 : Июнь 01, 2017, 14:27 »

Понятно, а открытие таблицы это новое заполнение QStandardItemModel из запроса к базе? Если данных мало, то можно после удаления у модели вручную удалить. Из ui->tableView->currentIndex() можно узнать индекс столбца

Я спрашивал про модель, потому что есть специальные модели для работы с базами, например QSqlTableModel
 
Код:
   QModelIndex string = ui->tableView->currentIndex().row();
   model->removeRows(string, 1);
Верно ли я вас поняла?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Июнь 01, 2017, 14:33 »

Тогда уж:
Код
C++ (Qt)
int row = ui->tableView->currentIndex().row();
model->removeRow(row);
 
Записан

diagnosefiz
Гость
« Ответ #9 : Июнь 01, 2017, 14:35 »

Тогда уж:
Код
C++ (Qt)
int row = ui->tableView->currentIndex().row();
model->removeRow(row);
 
Спасибо большое) получилось.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.089 секунд. Запросов: 23.