Difference between revisions of "How to create a custom calender widget/bg"

From Qt Wiki
Jump to: navigation, search
 
Line 1: Line 1:
[[Category:HowTo]]<br />[[Category:Snippets]]
+
[[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 =
  
Има много различни начини, по които може да се направи календар. Най-лесният би бил чрез използване на &quot;QCalendarWidget&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html. Обаче този клас предоставя ограничен контрол над външния вид.
+
Има много различни начини, по които може да се направи календар. Най-лесният би бил чрез използване на "QCalendarWidget":http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html. Обаче този клас предоставя ограничен контрол над външния вид.
  
Този проблем може да бъде разрешен чрез наследяване на &quot;QCalendarWidget&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html.<br />Приложен е примерен клас, който обяснява модифициран календар.
+
Този проблем може да бъде разрешен чрез наследяване на "QCalendarWidget":http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html.
 +
Приложен е примерен клас, който обяснява модифициран календар.
  
Клетките, или отделните дни са персонализирани и за да направим това контролираме метода &quot;paintCell&amp;quot;:http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html#paintCell, който е protected.
+
Клетките, или отделните дни са персонализирани и за да направим това контролираме метода "paintCell":http://doc.qt.io/qt-5.0/qtwidgets/qcalendarwidget.html#paintCell, който е protected.
  
 
'''Пример:'''
 
'''Пример:'''
  
<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){}
 +
~ourCalendarWidget() {}
  
void ourCall(QDate date)<br />{<br /> // here we set some conditions<br /> update();<br />}
+
void ourCall(QDate date)
 +
{
 +
// here we set some conditions
 +
update();
 +
}
  
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.
+
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-&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>
+
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 &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);
 }
}