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