Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: pupapum от Ноябрь 30, 2009, 19:12



Название: QCalendarWidget фон ячеек
Отправлено: pupapum от Ноябрь 30, 2009, 19:12
 Здравствуйте, хочу закрасить все ячейки в календаре красным цветом, переопределил paintCell(...) в классе - наследнике QCalendarWidget, но ничего не происходит, хотя paintCell(...) вызывается. Помогите, пожалуйста. Спасибо.
Код:
void Calendar::paintCell( QPainter * painter, const QRect & rect, const QDate & date ) const
{
    painter->setBackground(QBrush(Qt::red));
    QCalendarWidget::paintCell(painter,rect,date);

}


Название: Re: QCalendarWidget фон ячеек
Отправлено: spectre71 от Ноябрь 30, 2009, 19:56
  ui.setupUi(this);
...
...
   
  QPalette p =  ui.calendarWidget->palette();
  p.setColor(QPalette::Base, Qt::red);
  ui.calendarWidget->setPalette(p);


Название: Re: QCalendarWidget фон ячеек
Отправлено: zenden от Ноябрь 30, 2009, 20:15
Вы должны либо сами с нуля перерисовывать ячейку, к примеру:

Код
C++ (Qt)
if(date.dayOfWeek()==Qt::Sunday)
{
 painter->fillRect(rect, Qt::white);
 painter->save();
 painter->setPen(Qt::green);
 painter->drawText(rect, Qt::AlignCenter, QString::number(date.day()));
 painter->restore();
}
else
 QCalendarWidget::paintCell(painter, rect, date);
 

либо задавать параметры
Код
C++ (Qt)
 
QTextCharFormat charformat;
charformat.setBackground(QBrush(Qt::red));
ui->calendarWidget->setWeekdayTextFormat(Qt::Sunday,charformat);
 

либо с помощью стилей:
Код
C++ (Qt)
ui->calendarWidget->setStyleSheet("QAbstractItemView {background-color: rgb(255, 0, 0)}");

Цитата: Spectre
 ui.calendarWidget->setPalette(p);
у меня однако этот метод не сработал.


Название: Re: QCalendarWidget фон ячеек
Отправлено: spectre71 от Ноябрь 30, 2009, 20:26
Цитата: Spectre
 ui.calendarWidget->setPalette(p);
у меня однако этот метод не сработал.

Странно. Я проверил, у меня работает.


Название: Re: QCalendarWidget фон ячеек
Отправлено: pupapum от Декабрь 03, 2009, 16:45
Большое всем спасибо!


Название: Re: QCalendarWidget фон ячеек
Отправлено: Genius10 от Май 20, 2010, 10:03
Здравствуйте, хочу закрасить ячейку в календаре красным цветом, перепробовал все ничего не происходит :( закрашивает только столбцы а хотелось бы чтобы закрасил ячейку. Помогите, пожалуйста. Спасибо.

QTextCharFormat charformat;
    QTextCharFormat charformat1;
    charformat.setBackground(QBrush(Qt::red));
    charformat1.setBackground(QBrush(Qt::blue));
    ui->calendarWidget->setWeekdayTextFormat(Qt::Sunday,charformat);
    ui->calendarWidget->setWeekdayTextFormat(Qt::Saturday,charformat1);


Название: Re: QCalendarWidget фон ячеек
Отправлено: spectre71 от Май 21, 2010, 22:32
Здравствуйте, хочу закрасить ячейку в календаре красным цветом, перепробовал все ничего не происходит :( закрашивает только столбцы а хотелось бы чтобы закрасил ячейку. Помогите, пожалуйста. Спасибо.

QTextCharFormat charformat;
    QTextCharFormat charformat1;
    charformat.setBackground(QBrush(Qt::red));
    charformat1.setBackground(QBrush(Qt::blue));
    ui->calendarWidget->setWeekdayTextFormat(Qt::Sunday,charformat);
    ui->calendarWidget->setWeekdayTextFormat(Qt::Saturday,charformat1);


Никогда не пользовался данным виджетом и QTextCharFormat. Но.
Читаем доку: setWeekdayTextFormat
Цитировать
Sets the text char format for rendering of day in the week dayOfWeek to format. The format will take precedence over the header format in case of foreground and background color. Other text formatting information is taken from the headers format
День недели
Смотрим методы класса QCalendarWidget, ищем и где есть QTextCharFormat,  находим:
setDateTextFormat
====
Заняло 2 минуты !
Писал ответ минут 7 !


Название: Re: QCalendarWidget фон ячеек
Отправлено: Genius10 от Май 25, 2010, 08:02
Spectre - Большое спасибо!буду пробывать.


Название: Re: QCalendarWidget фон ячеек
Отправлено: HolyMacaroni от Август 30, 2010, 02:15
извините что поднял старую тему, просто самому тоже нужно было закрасить фон ячейки, и что бы ни кто не тратил целых 5 минут копаясь в асистенте:

Код:
    QTextCharFormat format;
    QBrush brush;
    QColor color;
    int r=200,g=145,b=234,a=120;
    color.setRgb(r,g,b,a);;
    brush.setColor(color);
    format.setBackground(brush);
    QDate date(2010,8,10);
    ui->calendarWidget->setDateTextFormat(date,format);