crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Апгрейд QCalendarWidget
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
giker Дата 20.5.2010, 8:23
  Вопрос решен. Для того что бы нужная нам информация отображалась в выбранной ячейке календаря создаем класс-наследник от QCalendarWidget, в котором переопределяем метод paintCell
void NewCalendarWidget::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
{
    if (date != selectedDate())
    {
        QCalendarWidget::paintCell(painter, rect, date);
    }
    else
    {
       //здесь отрисовываем нужную нам информацию в ячейку
    }
}


Но, если переопределить только этот метод, то при изменении даты, отображается информация соответствующая ячейке которая была выбрана до текущей, вызов методов paint() или update() не помогает. Для того что бы отображать актуальную информацию нужно вывести в публичные члены метод updateCells():

>NewCalendarWidget.cpp<
void NewCalendarWidget::updateCells()
{
    QCalendarWidget::updateCells();
}


>NewCalendarWidget.h<
public:
         void updateCells();


И вызывать его при смене выбранной даты после передачи календарю всей необходимой информации.
Litkevich Yuriy Дата 18.5.2010, 15:21
  методы делагатов вызывают представления, например метод paint, представления вызывают в своём обработчике события рисования (paintEvent)
giker Дата 18.5.2010, 10:23
  Всем хорошего дня.
Нужно сделать компонент на основе QCalendarWidget в ячейках которого кроме числа будет отображаться дополнительная информация. Дополнительная информация должна отображаться только для выбранной даты. То есть мне надо знать область рисования выбранной ячейки календаря.
В исходном коде класса есть метод
void QCalendarDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                              const QModelIndex &index) const
{
    QDate date = calendarWidgetPrivate->m_model->dateForCell(index.row(), index.column());
    if (date.isValid())
    {
        storedOption = option;
        QRect rect = option.rect;
        calendarWidgetPrivate->paintCell(painter, rect, date);
    }
    else
    {
        QItemDelegate::paint(painter, option, index);
    }
}


который и отвечают за прорисовку ячеек, но непонятно откуда он вызывается и откуда берется информация об области в которую происходит отрисовка. Не понятно также какой метод отрисовывает выбранную ячейку. Непонятно как связан класс QCalendarDelegate с классом QCalendarWidget.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 16:20