вы не наследует приватный класс QAbstractViewItemPrivate
Это да. Просто не совсем понятно, зачем его наследовать то? Виртуальных методов там нет. То есть я лично вижу 2 варианта:
1) Можем либо только что-то свое добавить. А смысл?
2) Либо изменить имеющиеся реализации. Но это приведет к тому, что придется еще и поддержать Qt'шные классы.
QTableView использует QAbstractViewItemPrivate. Для своего же класса, наследованного от QTableView, можете аналогично сделать приватный класс с требуемым функционалом. Аналогично как это и делает сам Qt.
Я правда не совсем понимаю необходимость создания таких приватных секций. Мне они в Qt доставляют только лишний гемор. Я решал схожую с вашей задачу и мне было проще переопределить нужные мне виртуальные функции. Но этот огрызок в приватной части, все равно остается, только уже мертвым грузом, который не выкинуть, но и его функционал мне не подходит.
А по другому не получается, то есть сделать чисто открытое наследование от QAbstractItemView можно, оно скомпилируется, но при сборке линковщик не найдет методы QAbstratItemViewPrivate
Не совсем понятно, что не получается? Если вы используете только члены и функции класса QAbstractItemView, то никакой проблемы нет при наследовании. Если же вы пытаетесь также использовать что-то из QAbstratItemViewPrivate, то полученный вами результат логичен.
Если кто знает как можно сделать свой класс , уналедованный от QAbstractItemView, чтобы можно было свободно его распространять без необходимости лезть в исходники Qt - буду безмерно признателен...
Вот пример наследования (да, пример на Qt5, но сути не меняет):
Большинство классов Qt имеют внутри приватные части, в которых и прячется "логика" этих классов. Такие классы имеют в конце приписку Private. Вы никогда от других классов, кроме QAbstractItemView, не наследовались? Даже у QWidget есть такой класс - QWidgetPrivate.
С другой стороны один раз сделав сборку из исходников понимаешь, что процесс добавления своего функционала внутрь, отладка, сборка совсем не трудные операции
Конечно, не трудные. К тому же в нете достаточное количество мануалов по этому поводу, не говоря уже про наличии официального мануала от Qt.
Другое дело, сборка занимает сравнительно много времени и ресурсов на диске. Году так в 2015 у меня сборка Qt4.8.7 занимала ~2 часа времени, сейчас конечно намного быстрее. А по размеру - сейчас, например, сборка Qt6.6 в статик и debud_and_release занимает порядка 80Гб.
Тут используется таймер потому, что в событии moveMouseEvent нельзя сразу отрисовывать таблицу или хэдер.
Можно, кто ж запрещает то? Другое дело, что движение мыши по таблице вызывает ее перерисовку..
По поводу делегатов, то тут все просто: делегату передается прямоугольник ячейки и далее делегат сам все отрисовывает в ячейке как ему надо. Это про комбобоксы, всякие чекбоксы и т.д.
Это не только комбобоксы, всякие чекбоксы и т.д. Делегаты занимаются как раз отрисовкой всего содержимого ячейки для соответствующего QModelIndex. С помощью них можете все что угодно рисовать внутри ячеек. Даже то же, что вы описываете во второй части статьи.
Оказывается если мы видим через qDebug() такое: QRect(0,0 101x101) и вроде бы ширина (и высота) равны 101. Но самом деле это означает реально ширину (или высоту) 100px.
Я тут выше в своем комментарии несколько ошибся. Правильно так вычисляется ширина:
Почему именно так, то полагаю это из-за того, как происходит отрисовка. Это хорошо описано в доке и даже с картинками.
Ну и под конец -
фреймворк Qt и последние 10 лет ничего почти в нем не менялось.
тут вроде много Вам примеров привели, что поменялось и довольно существенно.
Так, например, в Qt5 кардинально пересмотрели работы мета-объектной сисиемы и moc-компилятора. В связи с чем перешли на новую сигнатуру функций QObject::connect(...). Как результат: теперь о невозможности произвести коннект разработчик узнает на этапе сборки проекта.
Дополню о Qt6.
С версии Qt6.5 под Win 11 начали использовать новое апи. И теперь стала возможна нативная поддержка системных темных тем, без танцев с бубном, так и переключение "день\ночь" при соответствующем переключении системной темы. Подробнее на их сайте Dark Mode on Windows 11 with Qt 6.5
Это да. Просто не совсем понятно, зачем его наследовать то? Виртуальных методов там нет. То есть я лично вижу 2 варианта:
1) Можем либо только что-то свое добавить. А смысл?
2) Либо изменить имеющиеся реализации. Но это приведет к тому, что придется еще и поддержать Qt'шные классы.
QTableView использует QAbstractViewItemPrivate. Для своего же класса, наследованного от QTableView, можете аналогично сделать приватный класс с требуемым функционалом. Аналогично как это и делает сам Qt.
Я правда не совсем понимаю необходимость создания таких приватных секций. Мне они в Qt доставляют только лишний гемор. Я решал схожую с вашей задачу и мне было проще переопределить нужные мне виртуальные функции. Но этот огрызок в приватной части, все равно остается, только уже мертвым грузом, который не выкинуть, но и его функционал мне не подходит.
Поэтому мне и интересно, зачем оно вам)
Доброго времени. Будет много букв.
Не совсем понятно, что не получается? Если вы используете только члены и функции класса QAbstractItemView, то никакой проблемы нет при наследовании. Если же вы пытаетесь также использовать что-то из QAbstratItemViewPrivate, то полученный вами результат логичен.
Вот пример наследования (да, пример на Qt5, но сути не меняет):
Все спокойно собирается и работает.
Большинство классов Qt имеют внутри приватные части, в которых и прячется "логика" этих классов. Такие классы имеют в конце приписку Private. Вы никогда от других классов, кроме QAbstractItemView, не наследовались? Даже у QWidget есть такой класс - QWidgetPrivate.
Конечно, не трудные. К тому же в нете достаточное количество мануалов по этому поводу, не говоря уже про наличии официального мануала от Qt.
Другое дело, сборка занимает сравнительно много времени и ресурсов на диске. Году так в 2015 у меня сборка Qt4.8.7 занимала ~2 часа времени, сейчас конечно намного быстрее. А по размеру - сейчас, например, сборка Qt6.6 в статик и debud_and_release занимает порядка 80Гб.
Можно, кто ж запрещает то? Другое дело, что движение мыши по таблице вызывает ее перерисовку..
Это не только комбобоксы, всякие чекбоксы и т.д. Делегаты занимаются как раз отрисовкой всего содержимого ячейки для соответствующего QModelIndex. С помощью них можете все что угодно рисовать внутри ячеек. Даже то же, что вы описываете во второй части статьи.
Я тут выше в своем комментарии несколько ошибся. Правильно так вычисляется ширина:
Почему именно так, то полагаю это из-за того, как происходит отрисовка. Это хорошо описано в доке и даже с картинками.
Ну и под конец -
тут вроде много Вам примеров привели, что поменялось и довольно существенно.
Так, например, в Qt5 кардинально пересмотрели работы мета-объектной сисиемы и moc-компилятора. В связи с чем перешли на новую сигнатуру функций QObject::connect(...). Как результат: теперь о невозможности произвести коннект разработчик узнает на этапе сборки проекта.
Дополню о Qt6.
С версии Qt6.5 под Win 11 начали использовать новое апи. И теперь стала возможна нативная поддержка системных темных тем, без танцев с бубном, так и переключение "день\ночь" при соответствующем переключении системной темы. Подробнее на их сайте Dark Mode on Windows 11 with Qt 6.5
Согласно документации, ширина вычисляется как (х2-х1)-1