Russian Qt Forum
Ноябрь 05, 2024, 22:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QCalendarWidget фон ячеек  (Прочитано 10202 раз)
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);

}
Записан
spectre71
Гость
« Ответ #1 : Ноябрь 30, 2009, 19:56 »

  ui.setupUi(this);
...
...
   
  QPalette p =  ui.calendarWidget->palette();
  p.setColor(QPalette::Base, Qt::red);
  ui.calendarWidget->setPalette(p);
Записан
zenden
Гость
« Ответ #2 : Ноябрь 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);
у меня однако этот метод не сработал.
« Последнее редактирование: Ноябрь 30, 2009, 20:27 от zenden » Записан
spectre71
Гость
« Ответ #3 : Ноябрь 30, 2009, 20:26 »

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

Странно. Я проверил, у меня работает.
Записан
pupapum
Гость
« Ответ #4 : Декабрь 03, 2009, 16:45 »

Большое всем спасибо!
Записан
Genius10
Гость
« Ответ #5 : Май 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);
« Последнее редактирование: Май 21, 2010, 14:20 от Genius10 » Записан
spectre71
Гость
« Ответ #6 : Май 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 !
Записан
Genius10
Гость
« Ответ #7 : Май 25, 2010, 08:02 »

Spectre - Большое спасибо!буду пробывать.
Записан
HolyMacaroni
Гость
« Ответ #8 : Август 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);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.116 секунд. Запросов: 21.