2017-07-22 3 views
1

Ich versuche so etwas wie einen Ebeneneditor zu erstellen, den Sie normalerweise in den meisten Bildbearbeitungsprogrammen sehen, und dafür muss ich die neuen Ebenen oben auf dem QListWidget hinzufügen, der Code, den ich gerade versuche diese:Wie füge ich ein QListWidgetItem über dem QListWidget hinzu?

def new_layer(self): 

    layer = Layer(layer_name="Layer %d" % self.number_of_layers) 
    layer_item = QListWidgetItem(self) 
    layer_item.setSizeHint(layer.sizeHint()) 

    if self.number_of_layers % 2 == 0: 
     layer_item.setBackground(Qt.darkGray) 
    else: 
     layer_item.setBackground(Qt.gray) 

    self.setItemWidget(layer_item, layer) 
    self.insertItem(0, layer_item) 

    self.number_of_layers += 1 

auch nach den QListWidgetItem in der Reihe 0 eingefügt, wenn die neue Schicht wird hinzugefügt, um es unter der ersten Schicht angezeigt wird, die vorher erstellt wurde. Was könnte ich tun, um es zu reparieren?

Antwort

1

Nach dem docs:

QListWidgetItem :: QListWidgetItem (QListWidget * parent = 0, int type = Typ)

Konstrukten eines leeren Liste Widget Element des angegebenen Typs mit der gegeben Elternteil. Wenn Eltern nicht angegeben ist, muss der Artikel werden in eine Liste Widget eingefügt mit QListWidget::insertItem().

Dieser Konstruktor fügt das Element in das Modell des übergeordneten, die an den Konstruktor übergeben wird. Wenn das Modell sortiert ist, ist das Verhalten von der Einfügung unbestimmt, da das Modell die '<' -Operator Methode auf dem Element aufrufen wird, das zu diesem Zeitpunkt noch nicht konstruiert ist. Um das unbestimmte Verhalten zu vermeiden, empfehlen wir, das übergeordnete Element nicht anzugeben und stattdessen QListWidget::insertItem() zu verwenden.

Aus dem obigen wird geschlossen, dass Sie nicht die Eltern an die QListWidgetItem passieren sollte, so dass Ihr Code wie folgt aussehen sollte:

def new_layer(self): 

    layer = Layer(layer_name="Layer %d" % self.number_of_layers) 
    layer_item = QListWidgetItem() #remove self 
    layer_item.setSizeHint(layer.sizeHint()) 

    if self.number_of_layers % 2 == 0: 
     layer_item.setBackground(Qt.darkGray) 
    else: 
     layer_item.setBackground(Qt.gray) 

    self.insertItem(0, layer_item) 
    self.setItemWidget(layer_item, layer) 


    self.number_of_layers += 1 
+0

Ich habe in Ihrer Antwort nur eine einzige Änderung vorgenommen Damit es richtig funktioniert, habe ich die Zeile "self.setItemWidget (layer_item, layer)" mit der Zeile "self.insertItem (0, layer_item)" vertauscht, und jetzt funktioniert es wie erwartet, danke für deine Antwort –

Verwandte Themen