Russian Qt Forum

Qt => Общие вопросы => Тема начата: Archa4 от Февраль 24, 2011, 14:19



Название: Измененный календарь.
Отправлено: Archa4 от Февраль 24, 2011, 14:19
Дали такую задачу:
надо сделать, что бы календарь выглядел вот так:
http://img222.imageshack.us/i/calendarx.jpg/
Я хотел спросить, как лучше это реализовать, так как пока что моя идея - сделать QTableWidget, QCalendarWidget, брать данные о датах с QCalendarWidget и использовать их создавая вид одной клетки, которую потом можно ставить в таблицу с помощью QTableWidget->SetItem(...);
Но по-моему это как-то слишком мудрено, нету ли по проще способы изменить вид каждой клетки в QCalendarWidget, что бы показывать Дату и цифру под ней?


Название: Re: Измененный календарь.
Отправлено: kirill от Февраль 24, 2011, 14:28
Да можно конечно.
Наслдуйся от QCalendarWidget и перепиши функцию
virtual void paintCell ( QPainter * painter, const QRect & rect, const QDate & date ) const


Название: Re: Измененный календарь.
Отправлено: Archa4 от Февраль 24, 2011, 14:42
Спасибо за быстрый ответ!
Еще вопрос, смогу ли я потом получить доступ к этой цифре по датой?


Название: Re: Измененный календарь.
Отправлено: kirill от Февраль 24, 2011, 15:50
Спасибо за быстрый ответ!
Еще вопрос, смогу ли я потом получить доступ к этой цифре по датой?

Заведешь переменную класса и получай на здоровье


Название: Re: Измененный календарь.
Отправлено: Archa4 от Март 08, 2011, 10:34
Я извеняюсь за такой вопрос, но не мог бы кто-нибудь небольшой примерчик показать, как примерно хотя бы этот "virtual void paintCell" переписать? А то я даже не знаю с какой стороны за него взяться...


Название: Re: Измененный календарь.
Отправлено: alexman от Март 08, 2011, 10:41
Код:
class CustomCalendarWidget : public QCalendarWidget
{
public:
     CustomCalendarWidget( QWidget* parent = 0 ) : QCalendarWidget( parent ) {}
        ~CustomCalendarWidget() {}

protected:
        void paintCell( QPainter* painter, const QRect& rect, const QDate& date ) const
        {
              painter->setPen( Qt::black );
              painter->drawText( rect, Qt::AlignCenter, tr("Qt by Nokia") ); //for example
        }
};


Название: Re: Измененный календарь.
Отправлено: Archa4 от Март 08, 2011, 11:06
Код:
class CustomCalendarWidget : public QCalendarWidget
{
public:
     CustomCalendarWidget( QWidget* parent = 0 ) : QCalendarWidget( parent ) {}
        ~CustomCalendarWidget() {}

protected:
        void paintCell( QPainter* painter, const QRect& rect, const QDate& date ) const
        {
              painter->setPen( Qt::black );
              painter->drawText( rect, Qt::AlignCenter, tr("Qt by Nokia") ); //for example
        }
};

попробовал, получил несколько ошибок:
Код:
..\Calendar_forum_v2\/customcalendarwidget.h:17: error: invalid use of incomplete type 'struct QPainter'

..\..\..\NokiaQtSDK\Simulator\Qt\mingw\include/QtGui/qwindowdefs.h:68: error: forward declaration of 'struct QPainter'

..\Calendar_forum_v2\/customcalendarwidget.h:18: error: invalid use of incomplete type 'struct QPainter'

..\..\..\NokiaQtSDK\Simulator\Qt\mingw\include/QtGui/qwindowdefs.h:68: error: forward declaration of 'struct QPainter'


Название: Re: Измененный календарь.
Отправлено: Archa4 от Март 08, 2011, 11:38
Так, с ошибкой вроде разобрался, надо было #include <QPainter> сделать.
Теперь такая вещь:
в оригинале те даты которые от других месяцев (обычно конец предыдущего месяца и начало следующего) они серого цвета, но теперь все даты черного цвета. Как сделать чтобы было как в оригинале? Можно ли где-то посмотреть как этот Void PaintCell выглядел в оригинале, чтобы мой так же изменить?


Название: Re: Измененный календарь.
Отправлено: alexman от Март 08, 2011, 17:46
В исходниках...


Название: Re: Измененный календарь.
Отправлено: Archa4 от Март 09, 2011, 10:41
Эээ... А где их найти? Я попытался найти вайл QCalendarWidget.cpp, но не нашел такого файла. Есть только QCalendarWidget.h, но в нем толком ничего нет...


Название: Re: Измененный календарь.
Отправлено: alexman от Март 09, 2011, 11:43
Да ладно ??? У меня в директории '...Qt\4.7.1\src\gui\widgets\' есть файл 'qcalendarwidget.cpp'.


Название: Re: Измененный календарь.
Отправлено: Archa4 от Март 09, 2011, 11:50
эээ... Ну у меня Nokia Qt SDK  модет в этом проблема?


Название: Re: Измененный календарь.
Отправлено: alexman от Март 09, 2011, 11:52
эээ... Ну у меня Nokia Qt SDK  модет в этом проблема?
Скорее всего! Я не ставил SDK. Видимо в SDK достаточно библиотек + h-файлов.