LINUX.ORG.RU

Qt - любой виджет в ячейке табицы? Возможно?


0

2

Хочется создать такую таблицу, в которой будет 5 колонок, заголовок и одна строка «данных». При этом столбцы будут movable и resizeable, а внутри ячеек должны быть мои виджеты, которые с частотой 30 fps обновляются в своём paintEvent по таймеру, чуть-ли не видео крутят.

Мне всего-лишь нужно отобразить 5 виджетов в горизонтальном ряду и заголовок над каждым. Причём хочется перетащить заголовок и чтобы виджет под ним поменялся местами с другим виджетом.

Возможно ли это на базе view + model?

Как я понимаю, QAbstractItemModel для каждой ячейки хранит значение в QVariant - в нём (из интересных мне типов) есть QPixmap и UserType. Но если я возьму стандартный отображатель модели, например QTableView - то понятно, как он будет рисовать QPixmap, но непонятно как ему выдать QWidget, который бы жил своей жизнью в ячейке таблицы, получал события от мыши и т.п.

Я смотрю на QTableView чтобы не делать велосипед (хотя всеми руками принципиально за велосипеды). Можно взять QHeaderView в качестве заголовка, а остальное сделать самому. А можно и его самому переписать, чё-то мне не нравится, что он не анимированный, как заголовки в проводнике седьмой винды.

QTableWidget::setCellWidget()

unfo ★★★★★
()

Делаем свой класс, который наследует QAbstractItemDelegate. Дальше переопределяем метод paint(). Устанавливаем делегат к View.

Все это и многое другое в книге Johan Thelin - Foundations of Qt Development

frozenix ★★★
()
Ответ на: комментарий от frozenix

Это если полностью свой делегат делать, если встроить QWidget, то смотри стандартный пример Spin Box Delegate Example

frozenix ★★★
()
Ответ на: комментарий от frozenix

Хотя нет, старое, странно, что никто не написал отзыв ни в amazon ни в google books

frozenix ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.