Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Rphoenix от Февраль 23, 2020, 15:37



Название: TDBControlGrid
Отправлено: Rphoenix от Февраль 23, 2020, 15:37
Здравствуйте, переписываю прогу с Delphi 7. В нем есть класс DBControlGrid. Есть ли что-то подобное на QT? QML?
(https://www.mwasoftware.co.uk/images/articles/TDBControlGrid.png)


Название: Re: TDBControlGrid
Отправлено: DarkHobbit от Март 06, 2020, 09:03
Есть ли что-то подобное на QT?

Ну во-первых, то, что у тебя на картинке - это больше похоже не на Grid, а на List (явно выделенных столбцов нет).

Во-вторых. За QML не скажу, скажу за виджеты. В ячейку и QTableWidget, и QListWidget, ты можешь вставить ЛЮБОЙ виджет (см. метод setItemWidget), в том числе составной. То есть в принципе задача решаема.

Другое дело, что с БД в Qt обычно используют не QTableWidget/QListWidget, а QListView/QTableView и присоединяют к нему QSqlQueryModel. В этом случае список заполняется данными автоматически. В случае с QTableWidget/QListWidget тебе придётся велосипедить и вваливать в виджет данные программно. Работать будет, причём с точки зрения пользователя - примерно так же, как и на Delphi. Но для программста - много лишнего кода.

Можно ли синтезировать эти два подхода - я не знаю (хотя местные специалисты по MVC, возможно, подскажут).

И я надеюсь ты понимаешь, что такие решения стоит применять, когда число отображаемых записей, скажем так, не слишком большое?


Название: Re: TDBControlGrid
Отправлено: Igors от Март 06, 2020, 11:35
Вставлять в ячейку виджет хорошо для чего-то типа "раскладушки меню", т.е. когда число отображаемых невелико или вообще фиксировано. Здесь я бы делал так

- создал один невидимый виджет со всей "начинкой", возможно в дызайнере

- рисовать делегатом - сначала невидимый виджет заполняется данными, потом вызываем render() и получившийся имедж шлепаем в строку таблицы

С редактированим правда тоже заботы