我正在尝试将QCalendarWidget用于启用或禁用日期(而不仅仅是范围日期),但看起来不可能(https://bugreports.qt.io/browse/QTBUG-198)。
您是否知道是否可以使用paintEvent方法(或其他方法)执行此操作?
感谢您的阅读:)
答案 0 :(得分:3)
我做了一些研究。日历窗口小部件包含具有常规模型(QTableView
)的常规QCalendarView
子类(QCalendarModel
)。我的尝试是为视图添加代理模型,并更改data()
和flags()
函数以返回我想要禁用的日期的禁用状态。但我需要知道在一个单元格上显示哪个日期。有QCalendarModel::dateForCell
方法,但代码无法访问。它相当复杂,取决于QCalendarModel
的实现。
所以我觉得这几乎不可能。我看到的唯一方法是将QCalendarWidget
源复制到您的项目并重命名类以避免沿现有Qt类发生冲突。然后你可以改变实施。在使用最小和最大日期的任何地方(例如在QCalendarModel::flags
函数中),您应该使用启用/禁用的类列表替换它。
如果您在我的尝试中发现有用的内容,我已发布代码here。代理模型被接受,所有单元格的背景都变为绿色。