How to create a custom calender widget/bg

From Qt Wiki
Jump to navigation Jump to search


Български English

Промяна на външния вид на QCalendarWidget

Има много различни начини, по които може да се направи календар. Най-лесният би бил чрез използване на "QCalendarWidget":http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html. Обаче този клас предоставя ограничен контрол над външния вид.

Този проблем може да бъде разрешен чрез наследяване на "QCalendarWidget":http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html. Приложен е примерен клас, който обяснява модифициран календар.

Клетките, или отделните дни са персонализирани и за да направим това контролираме метода "paintCell":http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html#paintCell, който е protected.

Пример:

class ourCalendarWidget : public QCalendarWidget
{

Q_OBJECT

public:
 ourCalendarWidget(QWidget *parent = 0) : QCalendarWidget(parent){}
 ~ourCalendarWidget() {}

void ourCall(QDate date)
{
 // here we set some conditions
 update();
}

protected:
void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
{
 if ( ) // our conditions
 { // When the conditions are matched, passed QDate is drawn as we like.

painter->save();
 painter->drawEllipse(rect); // here we draw n ellipse and the day—
 painter->drawText(rec, Qt::TextSingleLine, Qt::AlignCenter,QString::number(date.day()));
 painter->restore();
 }
 else
 { // if our conditions are not matching, show the default way.
 QCalendarWidget::paintCell(painter, rect, date);
 }
}