2011-07-14 5 views
3

Je suis actuellement en utilisant Eclipse et Qt Jambi 3.5.2 4.7.2 dans Ubuntu 11.04 Natty NarwhalChangement horizontal en-tête Couleur de fond QCalendarWidget

J'ai une classe qui étend actuellement QCalendarWidget. J'essaie d'utiliser des feuilles de style pour styliser mon widget de calendrier. À l'heure actuelle, j'utilise QAbstractItemView pour colorier l'arrière-plan, mais cela ne change que la couleur d'arrière-plan des cellules avec des dates. L'en-tête horizontal contenant les jours des noms de semaine reste blanc peu importe ce que je fais. Existe-t-il un moyen de modifier la couleur d'arrière-plan de cet en-tête à l'aide d'une feuille de style?

Toute aide serait appréciée.

Merci.

+0

Je me demande est-ce encore possible? Ma meilleure estimation après presque une heure de recherche est de se rappeler que les dates sont affichées sur un QTableWidget (je crois), et que vous voulez éditer le QHeaderView pour cela (en particulier la méthode paintSection). J'espère que quelqu'un peut venir acheter et jeter plus de lumière à ce sujet. – ssell

+0

Je suppose que vous feriez mieux de demander une solution Ct/cpp pour cela; Je doute que l'implémentation de Jambi soit différente et si elle diffère, piquez-moi alors ... Et je regarderai si cela peut être corrigé :) – Smar

Répondre

2

Je suppose que vous essayez d'utiliser un fichier .qss et de définir la feuille de style en utilisant ce fichier.

Les développeurs n'ont pas complètement implémenté l'utilisation de feuilles de style externes avec le QCalendarWidget, vous devrez donc le pirater un peu.

Je suggère que vous avez ajouté une constante au fichier .qss que vous utilisez quelque chose comme:

@cons BACKGROUND_COLOR: cyan

Ensuite, vous pouvez lire le fichier dans votre code:

String color = ""; 
try { 
    URL qssFile = getClass().getResource("*PATHNAME*"); 
    Scanner scanner = new Scanner(qssFile.openStream()); 
    String nextLine; 
    try { 
     while (scanner.hasNextLine()){ 
     nextLine = scanner.nextLine(); 
     if (nextLine.contains("BACKGROUND_COLOR:")) { 
      color = nextLine.substring(nextLine.indexOf("BACKGROUND_COLOR:") + 17); 
     } 
    } 
    finally{ 
     scanner.close(); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Le 17 dans le code se réfère à la longueur de BACKGROUND_COLOR: afin que nous puissions obtenir le texte après.

Ensuite, vous voudrez créer un nouveau QColor, en le définissant à la couleur variable par le dessus. Ensuite, créez un nouveau QBrush à partir du QColor. Puis créez un nouveau QTextCharFormat et définissez son arrière-plan pour qu'il soit le QBrush. Enfin, définissez le format en appelant la méthode setWeekdayTextFormat sur le QCalendarWidget, en lui transmettant les jours de la semaine que vous souhaitez modifier et le format que vous souhaitez modifier. Le code de suivi définit la case pour chaque jour de la semaine dans la HorizontalHeader d'avoir une couleur de fond de cyan:

QColor c = new QColor(color); 
QBrush b = new QBrush(c); 
QTextCharFormat format = new QTextCharFormat(); 
format.setBackground(b); 
this.setWeekdayTextFormat(Qt.DayOfWeek.Sunday, format); 
this.setWeekdayTextFormat(Qt.DayOfWeek.Monday, format); 
this.setWeekdayTextFormat(Qt.DayOfWeek.Tuesday, format); 
this.setWeekdayTextFormat(Qt.DayOfWeek.Wednesday, format); 
this.setWeekdayTextFormat(Qt.DayOfWeek.Thursday, format); 
this.setWeekdayTextFormat(Qt.DayOfWeek.Friday, format); 
this.setWeekdayTextFormat(Qt.DayOfWeek.Saturday, format); 

Utilisez ces codes ensemble et vous avez vous-même un moyen de changer la couleur de fond de HorizontalHeader en utilisant Fichiers .qss (et plus si vous le souhaitez).

5

Je ne l'ai pas testé avec les versions inférieures à 4.8 mais nous avons eu le même problème et la solution était assez simple. Nous avons utilisé ce code CSS:

QWidget#qt_calendar_navigationbar 
{ 
    background-color: #424242; 
    border: 1px solid #4f4f4f; 
} 

modifier: Eh bien, lisez avant de poster - je ne sais pas si cela fonctionne dans votre sous-classe, mais il peut être la peine d'essayer.

+0

Semble ne pas fonctionner dans Qt 5.1.1 si vous ajoutez le QCalendarWidget à un QGraphicsScene. Quelque chose comme: m_QGraphicsScene-> addWidget (nouveau QCalendarWidget, Qt :: Window); – user1911091