Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

How to create a custom calender widget/de

From Qt Wiki
< How to create a custom calender widget
Revision as of 07:14, 2 March 2015 by Maintenance script (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Deutsch | English | Български

Die visuelle Darstellung von QCalendarWidget verändern

Es gibt zahllose Wege einen Kalender zu erstellen. Der einfachste ist wahrscheinlich "QCalendarWidget":http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html zu verwenden. Leider sind die Möglichkeiten dessen visuelle Darstellung zu beeinflussen stark begrenzt.

Man kann diesem Problem begegnen, indem man eine neue Klasse von QCalendarWidget ableitet. An dieser Stelle wird ein Code-Schnipsel gezeigt, der die Vorgehensweise am Beispiel verdeutlicht.

Wir wollen hier die Darstellung der Zellen, bzw. die Darstellung der angezeigten Tage, verändern. Dazu reimplementieren wir die protected Member-Function "paintCell":http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html#paintCell .

Beispiel:

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 &amp;rect, const QDate &amp;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);
 }
}

Das war's schon. Viel Spaß beim Programmieren!