void Window::localeChanged(int index)
{
- calendar->setLocale(localeCombo->itemData(index).toLocale());
+ const QLocale newLocale(localeCombo->itemData(index).toLocale());
+ calendar->setLocale(newLocale);
+ int newLocaleFirstDayIndex = firstDayCombo->findData(newLocale.firstDayOfWeek());
+ firstDayCombo->setCurrentIndex(newLocaleFirstDayIndex);
}
//! [1]
m_maximumDate = QDate(7999, 12, 31);
m_shownYear = m_date.year();
m_shownMonth = m_date.month();
- m_firstDay = Qt::Sunday;
+ m_firstDay = QLocale().firstDayOfWeek();
m_horizontalHeaderFormat = QCalendarWidget::ShortDayNames;
m_weekNumbersShown = true;
m_firstColumn = 1;
A newly created calendar widget uses abbreviated day names, and
both Saturdays and Sundays are marked in red. The calendar grid is
not visible. The week numbers are displayed, and the first column
- day is Sunday.
+ day is the first day of the week for the calendar's locale.
The notation of the days can be altered to a single letter
abbreviations ("M" for "Monday") by setting the
\property QCalendarWidget::firstDayOfWeek
\brief a value identifying the day displayed in the first column.
- By default, the day displayed in the first column is Sunday
+ By default, the day displayed in the first column
+ is the first day of the week for the calendar's locale.
*/
void QCalendarWidget::setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)
case QEvent::LayoutDirectionChange:
d->updateButtonIcons();
case QEvent::LocaleChange:
+ d->m_model->setFirstColumnDay(locale().firstDayOfWeek());
d->cachedSizeHint = QSize();
d->updateMonthMenuNames();
d->updateNavigationBar();
void setWeekdayFormat();
void showPrevNext_data();
void showPrevNext();
+
+ void firstDayOfWeek();
};
// Testing get/set functions
}
}
+void tst_QCalendarWidget::firstDayOfWeek()
+{
+ // Ensure the default locale is chosen.
+ QCalendarWidget calendar;
+ QLocale locale;
+ QCOMPARE(calendar.firstDayOfWeek(), locale.firstDayOfWeek());
+
+ QLocale germanLocale(QLocale::German);
+ QLocale::setDefault(germanLocale);
+ QCalendarWidget germanLocaleCalendar;
+ QCOMPARE(germanLocaleCalendar.firstDayOfWeek(), germanLocale.firstDayOfWeek());
+
+ // Ensure calling setLocale works as well.
+ QLocale frenchLocale(QLocale::French);
+ calendar.setLocale(frenchLocale);
+ QCOMPARE(calendar.firstDayOfWeek(), frenchLocale.firstDayOfWeek());
+
+ // Ensure that widget-specific locale takes precedence over default.
+ QLocale::setDefault(QLocale::English);
+ QCOMPARE(calendar.firstDayOfWeek(), frenchLocale.firstDayOfWeek());
+
+ // Ensure that setting the locale of parent widget has an effect.
+ QWidget* parent = new QWidget;
+ calendar.setParent(parent);
+ QLocale hausaLocale(QLocale::Hausa);
+ parent->setLocale(hausaLocale);
+ QCOMPARE(calendar.firstDayOfWeek(), hausaLocale.firstDayOfWeek());
+
+ // Ensure that widget-specific locale takes precedence over parent.
+ calendar.setLocale(germanLocale);
+ // Sanity check...
+ QCOMPARE(calendar.locale(), germanLocale);
+ QCOMPARE(parent->locale(), hausaLocale);
+ QCOMPARE(calendar.firstDayOfWeek(), germanLocale.firstDayOfWeek());
+}
+
QTEST_MAIN(tst_QCalendarWidget)
#include "tst_qcalendarwidget.moc"