How to create a custom calender widget: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
m (Correctly bit-or text flags)
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Category:HowTo]]<br />[[Category:Snippets]]
{{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.


'''English''' | [[How_to_create_a_custom_calender_widget_German|Deutsch]] | [[How_to_create_a_custom_calender_widget_Bulgarian|Български]]
Inheriting the {{DocLink|QCalendarWidget}} can solve the issue. Here is the example class which explains a 'custom' calendar widget.


= Customizing the appearance of QCalendarWidget =
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]
 
There are numerous ways to make a calendar. And the simplest one , must be using the &quot;QCalendarWidget&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html. However, we have limited control over the appearance of this widget.
 
Inheriting the &quot;QCalendarWidget&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html 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 &quot;paintCell&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html#paintCell


'''Example:'''
'''Example:'''


<code>class ourCalendarWidget : public QCalendarWidget<br />{
<code>
 
class ourCalendarWidget : public QCalendarWidget
Q_OBJECT
{
 
    Q_OBJECT
public:<br /> ourCalendarWidget(QWidget *parent = 0) : QCalendarWidget(parent){}<br /> ~ourCalendarWidget() {}
public:
    ourCalendarWidget(QWidget* parent=0)  
        : QCalendarWidget(parent)  
    {
    }


void ourCall(QDate date)<br />{<br /> // here we set some conditions<br /> update();<br />}
    ~ourCalendarWidget()  
    {
    }


protected:<br />void paintCell(QPainter *painter, const QRect &amp;rect, const QDate &amp;date) const<br />{<br /> if ( ) // our conditions<br /> { // When the conditions are matched, passed QDate is drawn as we like.
    void ourCall(QDate date)  
    {
        // here we set some conditions
        update();
    }


painter-&gt;save();<br /> painter-&gt;drawEllipse(rect); // here we draw n ellipse and the day—<br /> painter-&gt;drawText(rec, Qt::TextSingleLine, Qt::AlignCenter,QString::number(date.day()));<br /> painter-&gt;restore();<br /> }<br /> else<br /> { // if our conditions are not matching, show the default way.<br /> QCalendarWidget::paintCell(painter, rect, date);<br /> }<br />}</code>
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.
That is all. Happy coding.

Latest revision as of 18:27, 26 May 2020

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

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.