Название: Обновить relationModel для QSqlRelationalTableModel Отправлено: arial от Октябрь 08, 2009, 09:08 Имеется таблица в базе данных, которая называется "Persons", которая хранит в себе, например, список клиентов.
В этой таблице есть поле "NameId", которое хранит внешний ключ на таблицу "Names", которая хранит в себе имена клиентов. Создаю QTableView, к которому через QSqlRelationalTableModel привязана таблица "Persons". Написал делегат для колонки "NameId", редактор которого представляет из себя QLineEdit, который отображает имя из таблицы "Names". Теперь при вписывании в эту колонку имени клиента, метод setModelData делегата ищет в таблице "Names" вписанное имя, и, если находит, то подставляет в колонку "NameId" его идентификатор, если нет, то сначала создаёт новую запись с новым именем, получает его идентификатор а уже потом вписывает его в колонку "NameId". Вот код метода setModelData: Код
В итоге после отработки этого кода, если имя найдено в таблице "Names", то проблем нет, оно отображается. Проблемы начинаются, если имя не найдено. В namesModel из вышеприведённого кода новое имя добавляется, в таблице базы данных я его вижу, personId получает идентификатор, с этим тоже проблем нет, но после model->setData(index, personId); вновь введённое имя не отображается. Видимо нужно как-то обновить relationModel в QSqlRelationalTableModel, но я не знаю как. Название: Re: Обновить relationModel для QSqlRelationalTableModel Отправлено: break от Октябрь 20, 2009, 03:28 а если в вашем делегате переопределить еще и метод paint - для отрисовки данных когда ячейка не в режиме редактирвания и обновлять все и выводить в нем не используя QSqlRelation ???
Название: Re: Обновить relationModel для QSqlRelationalTableModel Отправлено: kkmspb от Февраль 03, 2023, 19:00 Состоялось интересное развитие классов QSqlTableModel и QTableView на старом добром Qt 4.8.1 в виде новых классов типа PblSqlRelationalTableModel и PblTableView. Там есть и готовый класс PblTableDlg, который включает полноценный функционал управления таблицей: вставка , удаление, копирование строки, поиск, отбор по значению и самое приятное внешние связи с другими таблицами для подстановки текстовых значений вместо ID реализованы внутри классов и работают автоматически.
Проект открытый свободный, развивается уже не один год, выложен на гитхабе https://github.com/PavelDorofeev/Fork-Sql-Qt-4.8.1--SQLite-3--relations--calc-fields (https://github.com/PavelDorofeev/Fork-Sql-Qt-4.8.1--SQLite-3--relations--calc-fields) |