Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: alex12 от Январь 16, 2009, 09:42



Название: Виджет с самодельной таблицей
Отправлено: alex12 от Январь 16, 2009, 09:42
Добрый день!

Необходимо сделать виджет с большой таблицей. Содержимое таблицы буду отрисовывать сам ибо оно очень специфично. Решение на QTableView не проходит. Нужен только горизонтальный заголовок, что упрощает дело.

Таблица большая. Нужен скроллинг. Судя по всему, такой виджет правильно будет делать, наследуясь от QAbstractScrollArea. Так это сделано в QTableView.

Вопрос: как грамотно организовать взаимодействие QAbstractScrollArea, QHeaderView, скроллинга и области отрисовки таблицы? Никто не сталкивался с такой задачей?


Название: Re: Виджет с самодельной таблицей
Отправлено: Rcus от Январь 16, 2009, 09:53
У меня такое подозрения что тролли сталкивались с этой задачей :) Хотелось бы узнать что из себя представляет содержимое таблицы, что не позволяет использовать роли, стили или наследование от QTableView для решения проблема.


Название: Re: Виджет с самодельной таблицей
Отправлено: alex12 от Январь 16, 2009, 10:31
У меня такое подозрения что тролли сталкивались с этой задачей :)

Смотрел исходники Qt. Много думал... Там сильные навороты, связанные с QAbstractModelView. Точного механизма работы скроллеров и хедеров я так и не понял.

Почему я не могу использовать QTableView? Мне видиться слишком сложным переопределять кучу разных механизмов, чтобы добиться относительно простого частного случая. В частности нужны:

  - разделительные линии разной толщины для разных столбцов,
  - нестандартное оформление выделенной области,
  - вывод дополнительных графических знаков в ячейку,
  - вывод текста разными цветами в одну ячейку,
  - сложное объединение ячеек,
  - нестандартный виджет ввода данных.

Как минимум здесь нужно переопределять:
  - QAbstractTableModel - собственно данные,
  - возиться с объединением ячеек,
  - стили для нестандартного выделения,
  - QAbstractItemDelegate для отображения,
  - Виджет редактора для ввода данных,
  - наверное еще что-то...

На таком пути я запнулся на разделительных линии разной толщины для разных столбцов.

Собственно уточнение вопроса: скроллеры уже есть на QAbstractScrollArea. Осталось правильно разместить заголовок таблицы и связать изменение размеров всего виджета и QHeaderView?



Название: Re: Виджет с самодельной таблицей
Отправлено: Dendy от Январь 16, 2009, 10:44
Вам нужен собственно отнаследоваться от QAbstractItemView. Хидеров в нём нет, так как это деталь реализации, вам прийдётся добавить свой и разместить его руками самостоятельно. Внутри всё будет рисоваться с помощью низкоуровневого QPainter. К примеру у меня сейчас наследник от QAbstractItemView, содержимое которого рисуется с помощью OpenGL.


Название: Re: Виджет с самодельной таблицей
Отправлено: prometey от Март 11, 2009, 02:07
to alex12:

у меня стоит задача один в один, только вот проблема что я совершенно начинающий в QT :) поэтому мне будет очень интересно узнать о ходе продвижения разработки и о возникающих трудностях.

Заранее благодарен.


Название: Re: Виджет с самодельной таблицей
Отправлено: limmenz от Май 02, 2009, 05:18
to alex12:

у меня стоит задача один в один, только вот проблема что я совершенно начинающий в QT :) поэтому мне будет очень интересно узнать о ходе продвижения разработки и о возникающих трудностях.

Заранее благодарен.

Присоединяюсь к просьбе  :)


Название: Re: Виджет с самодельной таблицей
Отправлено: Авварон от Май 02, 2009, 11:16
не представляю как делать только пункты 1 и 5, причем йа нуб в qt