2013-07-23 6 views
4

Я пытаюсь использовать QCalendarWidget с включенными или отключенными датами (и не только диапазонами дат), но это выглядит невозможно (https://bugreports.qt.io/browse/QTBUG-198).QCalendarWidget - Как отключить даты

Знаете ли вы, можно ли это сделать с помощью метода paintEvent (или что-то еще)?

Спасибо за чтение :)

ответ

3

Я провел некоторое исследование. Календарный виджет содержит обычный QTableView подкласс (QCalendarView) с обычной моделью (QCalendarModel). Моя попытка состояла в том, чтобы добавить прокси-модель для представления и изменить функции data() и flags(), чтобы вернуть отключенное состояние для дат, которые я хотел отключить. Но мне нужно было знать, какая дата отображается в ячейке. Для этого существует метод QCalendarModel::dateForCell, но он недоступен для кода. Это довольно сложно и зависит от реализации QCalendarModel.

Так что я думаю, что это вряд ли возможно. Единственный способ, который я вижу, - скопировать источник QCalendarWidget в ваш проект и переименовать классы, чтобы избежать конфликтов вдоль существующих классов Qt. Затем вы можете изменить реализацию. В любом месте, где используется минимальная и максимальная дата (например, в функции QCalendarModel::flags), вы должны заменить его на использование списка включенных/отключенных классов.

Если вы нашли что-то полезное в своей попытке, я опубликовал код here. Прокси-модель заглавлена, и фон всех ячеек становится зеленым.

+0

Много благодарностей за ваш ответ, извините за мой поздний ответ. Я попробую ваше решение на следующей неделе и рассмотрю ваш исходный код. –

Смежные вопросы