如何获取QCalendarWidget中显示的所有日期

时间:2010-02-17 13:33:00

标签: c++ qt calendar

我在我的应用程序中使用了QCalendarWidget,并且我重载了updateCells方法,在每个满足特定条件的日期都设置了红色背景。

我的问题是我不知道如何在日历中显示第一个日期显示(不是本月的第一个日期),以及显示的最后日期 。 示例:在2月,显示的第一个日期是1月25日,显示的最后一个日期是7月3日。

QCalendarWidget中没有任何有用的方法,我想不出这个算法。 你知道怎么做吗?

2 个答案:

答案 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)