QCalendarWidget-如何禁用日期

QCalendarWidget - How to disable dates

本文关键字:日期 何禁用 QCalendarWidget-      更新时间:2023-10-16

我正在尝试使用启用或禁用日期的QCalendarWidget(不仅是范围日期),但这看起来不可能(https://bugreports.qt.io/browse/QTBUG-198)。

你知道用paintEvent方法(或其他方法)是否可以做到这一点吗?

感谢阅读:)

我做了一些研究。日历小部件包含一个具有常规模型(QCalendarModel)的常规QTableView子类(QCalendarView)。我的尝试是为视图添加一个代理模型,并更改data()flags()函数,以返回我想要禁用的日期的禁用状态。但我需要知道哪个日期显示在一个单元格上。有QCalendarModel::dateForCell方法,但从代码中无法访问。它相当复杂,并且取决于QCalendarModel的实现。

所以我认为这几乎是不可能的。我看到的唯一方法是将QCalendarWidget源代码复制到您的项目中,并重命名类,以避免与现有Qt类发生冲突。然后您可以更改实现。在任何使用最短和最长日期的地方(例如在QCalendarModel::flags函数中),您都应该使用启用/禁用的类列表来替换它。

如果你在我的尝试中发现有用的东西,我已经在这里发布了代码。代理模型已启动,所有单元格的背景都变为绿色。