Название: Свой делегат в виде QTableView Отправлено: Kunashir от Марта 05, 2011, 15:34 День добрый!
Программа тянет данные из БД, для отображение использую QSqlRelationalTableModel и свой класс наследник от QTableView. Для отображение данных по внешним ключам решил сделать делегат, который будет показывать QTableView связной таблицы (алгоритм отображении связной таблице точно такой же). Создаю делегат: Код: class DelegatPerson : public QItemDelegate теперь в классе отображения первой таблицы делают так: Код: ViewUser::ViewUser (QWidget *parent) Если убрать Код: DelegatPerson *delPerson = new DelegatPerson (0, this); Реализация делегата: Код: DelegatPerson::DelegatPerson (int id, QObject *parent) Думаю может из-за этого что не сделал реализацию setEditorData, setModelData и updateEditorGeometry. Но если в конструкторе не устанавливать setItemDelegateForColumn(3, delPerson);, а даже просто оставить создание делегата - данные уже не отображаются. Собственно вопрос - почему только инициализация экземпляра класса DelegatPerson в конструкторе ViewUser приводит к тому что данные не отображаются, хотя количество строк создается верное. Название: Re: Свой делегат в виде QTableView Отправлено: Kunashir от Марта 09, 2011, 11:08 Оказывается дело было в этом:
Код: m_dbase = new CDatabase ("user"); замена на: Код: m_dbase = new CDatabase ("user2"); Решило проблему, хотя не ясно все же в чем трабола была, может есть служебное подключение с именем "user" - в причинах пока не разобрался. Название: Re: Свой делегат в виде QTableView Отправлено: Kunashir от Марта 09, 2011, 17:28 Теперь вот возник новый вопрос:
для делегата я использую по сути другой QTableView, ну сделал методы который способны вернуть данные из модели в вызываемом QTableView, а вот как установить данные в ячеки QTableView, который использует вызываемый делегат? Если с простыми делегатами понятно: Код: someDel->setData(value); или что-то подобное, но здесь получается что делегат на прямую не связан с ячейкой, которая по сути представляет этот делегат, или я что-то не допонимаю? Название: Re: Свой делегат в виде QTableView Отправлено: Kunashir от Марта 10, 2011, 11:05 Ну отображение вроде тоже сделал, правда только изначальное, установка новых данных почему-то не проходит...
Может есть у кого пример, как заменить стандартный ComboBox, который обычно используется как делегат для ячеек, отображающих данные по внешним ключам, на что-то другое - ведь если данных в связной таблице много выбирать их в ComboBox неудобно. В идеале хорошо бы чтобы по клике по ячейки, которая по сути хранить внешний ключ, появлялась форма связной таблицы, в которой можно сделать выбор. Название: Re: Свой делегат в виде QTableView Отправлено: CL0NE от Марта 23, 2011, 03:34 наподобие http://www.prog.org.ru/topic_16381_0.html ?
Название: Re: Свой делегат в виде QTableView Отправлено: Kunashir от Марта 24, 2011, 16:13 Решил я эту проблему. Как приведу код в порядок выложу!
|