How to create a custom calender widget: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
m (Correctly bit-or text flags) |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{LangSwitch}} | |||
[[Category:HowTo]] | |||
[[Category:Snippets]] | |||
There are numerous ways to make a calendar. And the simplest one , must be using the {{DocLink|QCalendarWidget}}. However, we have limited control over the appearance of this widget. | |||
Inheriting the {{DocLink|QCalendarWidget}} can solve the issue. Here is the example class which explains a 'custom' calendar widget. | |||
The cells, or the particular days are customized, and in order to do this , we need to take control over the protected function [http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html#paintCell paintCell] | |||
'''Example:''' | |||
<code> | |||
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); | |||
} | |||
} | |||
}; | |||
</code> | |||
That is all. Happy coding. | |||
Latest revision as of 18:27, 26 May 2020
There are numerous ways to make a calendar. And the simplest one , must be using the QCalendarWidget. However, we have limited control over the appearance of this widget.
Inheriting the QCalendarWidget can solve the issue. Here is the example class which explains a 'custom' calendar widget.
The cells, or the particular days are customized, and in order to do this , we need to take control over the protected function paintCell
Example:
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);
}
}
};
That is all. Happy coding.