Bonjour

dans un QtableWidget, ma colonne 0 est une colonne de case à coché.

Je gère ces case à cochées grace à un delegate (cf ci-dessous)

Jusqu'a présent cela se passé bien. Mais depuis l'arrivé de Yosemite sur mac, l'interface graphique du système a changé, et la case à coché reste sur fond blanc et le tag aussi. Bref c'est illisible. (cf image)

Bref je cherche à changer le style de la case à cochée pour la rendre lisible. Mais je n'y arrive pas. Je ne comprend rien ni au painter ni au style etc...

Pouvez vous m'aider ou me mettre sur la voix?

Nom : Capture d’écran 2014-10-30 à 16.36.43.png
Affichages : 424
Taille : 5,1 Ko
premiere case coché, pas la deuxième...

code du delegate :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
class CBDelegate(QtGui.QStyledItemDelegate):
    """
    A delegate that places a fully functioning QCheckBox in every
    cell of the column to which it's applied
    """
    def __init__(self, parent):
        QtGui.QItemDelegate.__init__(self, parent)
        self.parent = parent
 
    def createEditor(self, parent, option, index):
        '''
        Important, otherwise an editor is created if the user clicks in this
        cell.
        ** Need to hook up a signal to the model
        '''
        return None
 
    def paint(self, painter, option, index):
        '''
        Paint a checkbox without the label.
        '''
        #painter.setPen(QtCore.Qt.darkGreen)
        print painter.isActive()
        checked = index.data().toBool()
        check_box_style_option = QtGui.QStyleOptionButton()
 
        if (index.flags() & QtCore.Qt.ItemIsEditable) > 0:
            check_box_style_option.state |= QtGui.QStyle.State_Enabled
            print 1
        else:
            check_box_style_option.state |= QtGui.QStyle.State_ReadOnly
            print 2
        if checked:
            check_box_style_option.state |= QtGui.QStyle.State_On
            print 3
        else:
            check_box_style_option.state |= QtGui.QStyle.State_Off
            print 4
 
        check_box_style_option.rect = self.getCheckBoxRect(option)
 
        check_box_style_option.state |= QtGui.QStyle.State_Enabled
 
        QtGui.QApplication.style().drawControl(
            QtGui.QStyle.CE_CheckBox, check_box_style_option, painter)
 
    def editorEvent(self, event, model, option, index):
        '''
        Change the data in the model and the state of the checkbox
        if the user presses the left mousebutton or presses
        Key_Space or Key_Select and this cell is editable. Otherwise do nothing
        '''
        # If event type is : Mouse move => Pass
        if event.type() == 5:
            return False
        if not (index.flags() & QtCore.Qt.ItemIsEditable) > 0:
            return False
 
        # Do not change the checkbox-state
        if event.type() == QtCore.QEvent.MouseButtonPress:
            return False
        if event.type() == QtCore.QEvent.MouseButtonRelease or \
           event.type() == QtCore.QEvent.MouseButtonDblClick:
            if event.button() != QtCore.Qt.LeftButton or not \
               self.getCheckBoxRect(option).contains(event.pos()):
                return False
            if event.type() == QtCore.QEvent.MouseButtonDblClick:
                return True
        elif event.type() == QtCore.QEvent.KeyPress:
            if event.key() != QtCore.Qt.Key_Space and\
               event.key() != QtCore.Qt.Key_Select:
                return False
            else:
                return False
 
        # Change the checkbox-state
        self.setModelData(None, model, index)
        return True
 
    def setModelData(self, editor, model, index):
        '''
        The user wanted to change the old state in the opposite.
        '''
 
        # Update model therefore the view delegate
        newValue = not index.data().toBool()
        model.setData(index, format(newValue), QtCore.Qt.EditRole)
        model.submit()
 
        # Save data in SQL Table
        QTableRow = index.row()
        QTableCol = index.column()
        self.parent.editDataItem(
            QTableRow, QTableCol, newValue, refreshTable=False)
 
    def getCheckBoxRect(self, option):
        check_box_style_option = QtGui.QStyleOptionButton()
        check_box_rect = QtGui.QApplication.style().subElementRect(
            QtGui.QStyle.SE_CheckBoxIndicator, check_box_style_option, None)
        check_box_point = QtCore.QPoint(
            option.rect.x() +
            option.rect.width() / 2 -
            check_box_rect.width() / 2,
            option.rect.y() +
            option.rect.height() / 2 -
            check_box_rect.height() / 2)
        return QtCore.QRect(check_box_point, check_box_rect.size())