QSqlTableModel+QListView добавление новой записи вручную..., хнык :( |
Здравствуйте, гость ( Вход | Регистрация )
QSqlTableModel+QListView добавление новой записи вручную..., хнык :( |
LE0N |
17.3.2009, 6:19
Сообщение
#1
|
Студент Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: 0 |
Имеется простенькая задача - при нажатии на кнопку "добавить" нужно добавить ещё одну запись в модель.
Редактирование произвести через QListView. Всё бы хорошо. Всё добавляется. Кроме одного - мне нужно на ходу в другие ( не редактируемые QListView поля, добавить свои переменные... НИ ХЕРА НЕ ВЫХОДИТ! Уже пол ночи с этим колупаюсь! Вот, собственно, слот с данным действием. (Заменил QListView, на QTableView ноль реакции, ещё и неприятные визуальные эффекты стали возникать...).
Кроме(внутри функции, приведённой выше):
Пробывал и insertRecord...Ноль реакции. В таблицу попадает полностью пустая запись... |
|
|
BRE |
17.3.2009, 9:10
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
LE0N |
17.3.2009, 9:43
Сообщение
#3
|
Студент Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата Если так QSqlRecord record( int ), то ты изменяешь локальную копию записи. Да хоть так пишу... Разницы НОЛЬ!
[offtopic] ЗЫ. маленький ликбез...Правильно ли я понял, что если передаёшь ссылку на переменную, инициализированную локально (QSqlRecord bla;) в какую-нибудь функцию, то она убивается после того, как функция, в которой она инициализировалась, завершается? Если это так. То как в последствии поступают тру Си-Плюс-Плюснеги, когда им требуется уничтожить эту самую QSqlRecord, инициализированную через new ? Создают свойство и убивают в деструкторе? Даже если эта QSqlRecord используется в одном месте ? =\ ЗЫ.ЗЫ. Перехожу с чистого СИ, на СИ++ QT [/offtopic] Сообщение отредактировал LE0N - 17.3.2009, 9:47 |
|
|
BRE |
17.3.2009, 9:52
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Да хоть так пишу... Разницы НОЛЬ! Как и писал раньше, сам QSqlTableModel не пользуюсь, но вот цитата из assistent: Раскрывающийся текст Цитата Use QSqlTableModel::record() to retrieve a row in the table, and QSqlTableModel::setRecord() to modify the row. For example, the following code will increase every employee's salary by 10 per cent: for (int i = 0; i < model.rowCount(); ++i) { QSqlRecord record = model.record(i); double salary = record.value("salary").toInt(); salary *= 1.1; record.setValue("salary", salary); model.setRecord(i, record); } model.submitAll(); You can also use QSqlTableModel::data() and QSqlTableModel::setData(), which are inherited from QAbstractItemModel, to access the data. For example, here's how to update a record using setData(): model.setData(model.index(row, column), 75000); model.submitAll(); Here's how to insert a row and populate it: model.insertRows(row, 1); model.setData(model.index(row, 0), 1013); model.setData(model.index(row, 1), "Peter Gordon"); model.setData(model.index(row, 2), 68500); model.submitAll(); Here's how to delete five consecutive rows: model.removeRows(row, 5); model.submitAll(); The first argument to QSqlTableModel::removeRows() is the index of the first row to delete. When you're finished changing a record, you should always call QSqlTableModel::submitAll() to ensure that the changes are written to the database. |
|
|
SABROG |
17.3.2009, 9:58
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
QSqlRecord работает только в одну сторону - принимает данные из базы, но менять их не может. А вот SqlTableMode::submitAll уже транслирует твои действия с моделью на базу данных.
|
|
|
LE0N |
17.3.2009, 10:05
Сообщение
#6
|
Студент Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата но вот цитата из assistent: Скорее бы и я так научился с асистентом работать. Заманал QT со своими двойными стандартами реализации setData сработал...Спасибо.. Цитата QSqlRecord работает только в одну сторону - принимает данные из базы Интересно, а зачем тогда в нём есть методы публичные setValue ???? Мне не в базе нужно менять. А в модели. А уже модель будет менять в базе. |
|
|
Текстовая версия | Сейчас: 14.1.2025, 19:45 |