QCalendarWidget - 如何禁用日期

时间:2013-07-23 09:41:26

标签: c++ qt

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

您是否知道是否可以使用paintEvent方法(或其他方法)执行此操作?

感谢您的阅读:)

1 个答案:

答案 0 :(得分:3)

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

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

如果您在我的尝试中发现有用的内容,我已发布代码here。代理模型被接受,所有单元格的背景都变为绿色。