WindeL
Апрель 15, 2013 11:44:39
Господа, прошу помощи в создании виджета. Задача в том, чтобы сделать грид, поместить туда объекты, типа прямоугольников, с возможностью двигать эти объекты по всему гриду. Желательно, чтобы такой объект можно было поместить на границе двух ячеек, т.е. одна часть в области одной ячейки, а другая второй. Визуально должно получиться типа сетки расписаний для работников.
Не могу понять, от чего лучше наследоваться и что переопределять, чтобы получить такой функционал…
Предполагаю, что стоит смотреть в сторону QAbstractModel + ATableView + Drag'n'Drop и копаться в QAbstractItemModel.
reclosedev
Апрель 15, 2013 18:10:51
WindeL
Желательно, чтобы такой объект можно было поместить на границе двух ячеек, т.е. одна часть в области одной ячейки, а другая второй.
Без этого, можно было бы обойтись
http://qt-project.org/doc/qt-4.8/qabstractitemdelegate.htmlА с таким требованием, нужно будет переопределить QTableView.paintEvent() и в нем рисовать. Думаю, придется много чего учитывать, отключать встроенное выделение ячеек, а передвижения отлавливать в mouseEvent'ах.
Хотя может и QAbstractItemDelegate можно обойтись, только в модели данные должны будут знать, что только половина их ячейки закрашивается и половина соседней.
Но я не понял, что это за данные и как это должно выглядеть.
WindeL
Апрель 16, 2013 10:16:33
reclosedev, cпасибо за делегатов. Понимаю, что надо в эту сторону смотреть. Можно обойтись и жесткими границами ячеек для перемещающихся объектов. Приложил файл как примерно должно все выглядеть.
reclosedev
Апрель 16, 2013 17:48:46
А, диаграмма Ганта. Тогда еще есть вариант от QTableView совсем отказаться, и рисовать все кроме хедеров самому, и сделать нормальный API, заточенный конкретно под расписание.
Или все-таки использовать делегаты и разделить месяц на 4 части.
Еще можно поискать “qt gantt chart”. Но я бегло (очень) посмотрел, попадаются только платные компоненты и вопросы.
WindeL
Апрель 17, 2013 08:43:15
Да, я понял, что не надо использовать таблицу для того, для чего она не предназначена. Буду свой виджет делать.