How to create a custom calender widget/bg: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[Category:HowTo]] | [[Category:HowTo]] | ||
[[Category:Snippets]] | |||
'''Български''' [[How_to_create_a_custom_calender_widget|English]] | '''Български''' [[How_to_create_a_custom_calender_widget|English]] | ||
Line 5: | Line 6: | ||
= Промяна на външния вид на QCalendarWidget = | = Промяна на външния вид на 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. | ||
'''Пример:''' | '''Пример:''' | ||
<code>class ourCalendarWidget : public QCalendarWidget | <code>class ourCalendarWidget : public QCalendarWidget | ||
{ | |||
Q_OBJECT | Q_OBJECT | ||
public: | public: | ||
ourCalendarWidget(QWidget *parent = 0) : QCalendarWidget(parent){} | |||
~ourCalendarWidget() {} | |||
void ourCall(QDate date) | void ourCall(QDate date) | ||
{ | |||
// here we set some conditions | |||
update(); | |||
} | |||
protected: | 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- | 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> |
Revision as of 12:38, 25 February 2015
Български 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);
}
}