我在我的应用程序中使用了QCalendarWidget,并且我重载了updateCells方法,在每个满足特定条件的日期都设置了红色背景。
我的问题是我不知道如何在日历中显示第一个日期显示(不是本月的第一个日期),以及显示的最后日期 。 示例:在2月,显示的第一个日期是1月25日,显示的最后一个日期是7月3日。
QCalendarWidget中没有任何有用的方法,我想不出这个算法。 你知道怎么做吗?
答案 0 :(得分:1)
由于您可以访问当前显示的月份和年份,因此可以在显示内容的第一个和最后一个日期使用QDate::dayOfWeek。考虑到QCalendarWidget::firstDayOfWeek,你必须能够决定你必须前后走多远。
答案 1 :(得分:0)
QCalendarWidget类是更简单的小部件的组合,您可以查看Qt源代码以获取帮助。只需使用循环即可获取之间的所有日期:
class myQCalendar(QCalendarWidget):
"""custum QCalendarWidget"""
def __init__(self, parent=None):
self.table = self.findChild(QTableView)
def return_first_last_dates(self) -> Tuple[QDate, QDate]:
# first row(0) and col(0) - headers, so we use second(1,1)
first_date = self.date_by_index(
self.table.model().index(1, 1))
last_date = self.date_by_index(
self.table.model().index(6, 7))
return first_date, last_date
# self.table.model().dateForCell(1,1) didn't work in python
# maybe it will work in c++
def date_by_index(self, index: QModelIndex) -> QDate:
""" Return QDate by index of model of QTableView """
date = self.selectedDate()
day = int(index.data())
mnth = date.month() # current month always the same as current date
if day > 15 and index.row() < 3: # qcalendar always display 6 rows( and 0 - is header)
mnth = date.month() - 1
if day < 15 and index.row() > 4:
mnth = date.month() + 1
return QDate(date.year(), mnth, day)