2013-02-03 73 views
2

我知道有沒有支持QCalendarWidgetQSS造型,但沒有人知道一些解決方法改變部分1QCalendarWidget2的顏色? (淡藍色的部分1和白色部分2Qt的QCalendarWidget QSS造型

enter image description here

謝謝!

回答

6

我檢查了QCalendarWidgetsource code並找到了解決辦法。

QCalendarWidget內部有一個模型和一個視圖來顯示天。 QCalendarModel有一個formatForCell(int, int)函數,該函數返回給定單元格的QTextCharFormat。返回格式是合併QCalendarView調色板數據的結果,當天的格式(星期六和星期日以紅色顯示)以及當前日期的格式,可以使用QCalendarWidget::setDateTextFormat函數進行設置。

實際上是一個項目的背景是:

format.setBackground(pal.brush(cg, header ? QPalette::AlternateBase : QPalette::Base)); 
  • palQCalendarView的調色板;
  • cgcolor group;
  • header在當前小區是一個標題單元格(在您的示例第1節)

因此,所有你需要的是你的自定義調色板設置爲內部QCalendarView是真實的。在源代碼中我們可以發現,QCalendarView對象有一個名爲「qt_calendar_calendarview」,我們可以使用:

QCalendarWidget *c = new QCalendarWidget; 

QTableView *view = c->findChild<QTableView*>("qt_calendar_calendarview"); 
if (view) 
{ 
    QPalette pal = view->palette(); 
    pal.setColor(QPalette::Base, Qt::red); 
    pal.setColor(QPalette::AlternateBase, Qt::green); 
    view->setPalette(pal); 
} 

在我的例子部分1將紅色和第2節將是綠色的。 此外,您可以設置顏色,爲你的每color group調色板,讓你喜歡當它活躍的小部件,不活動等

+0

太棒了!非常感謝你! –

1

區「1」定製:

QTextCharFormat format; 
format.setForeground(QBrush(Qt::blue)); 
format.setBackground(QBrush(Qt::red); 
ui->calendarWidget->setHeaderTextFormat(format); 

區「2」 QSS CSS:

QCalendarWidget QAbstractItemView 
{ 
background-color: rgb(192,192,192); /* цвет фона текущего месяца */ 
selection-background-color: yellow; /* цвет фона выбранного дня */ 
selection-color: black; /* цвет текста выбранного дня */ 
} 

#qt_calendar_calendarview 
{ 
background-color: rgb(192,192,192); /* цвет фона текущего месяца */ 
selection-background-color: yellow; /* цвет фона выбранного дня */ 
selection-color: black; /* цвет текста выбранного дня */ 
} 

,wher e #qt_calendar_calendarview - 對象的名稱從d->m_view->setObjectName(QLatin1String("qt_calendar_calendarview"));qcalendarwidget.cpp