2016-08-02 14 views
0

Ich begann mit der Arbeit an einem Projekt, das die Verwendung von TableView erfordert. Meine Tabelle hat 3 Spalten und die letzte Spalte hat eine ComboBox. Mit dem Delegate konnte ich die ComboBox setzen und ein Signal abrufen, wenn sich der Indexstatus der ComboBox ändert. Das Problem ist, ich kann nicht identifizieren, von welcher ComboBox das Signal ausgegeben wird.Signale von Delegaten

Wenn ich dem Hauptfenster den QString der ComboBox signalisiere, scheint das sehr schlecht zu sein. Ich habe mir eine Lösung ausgedacht, um aus jeder Zeile den Index der Zeile in die ComboBox einzufügen. So etwas wie Zeile + Name.

ich starten Sie die Verbindung mit der Beratung von einem anderen Beitrag, so wie:

signals: 
    void boxDataChanged(const int & str); 

erstellen Editor:

QComboBox * editor = new QComboBox(parent); 
    editor->addItem("This"); 
    editor->addItem("is"); 
    editor->addItem("nice"); 

    connect(editor, SIGNAL(currentIndexChanged(int)), this, SIGNAL(boxDataChanged(int))); 

    return editor; 

Und genannt wie:

connect(mydelegate, &Delegate::boxDataChanged, [=](const int & str) 
{ 
     qDebug() << str; 
}); 

Dies funktioniert Schön, aber ich muss auch wissen, aus welcher Hexerei das kommt.

Antwort

1

Das Problem ist, ich kann nicht identifizieren, von der ComboBox ist das Signal aus.

Sie können QObject::sender verwenden, um den Sender des Signals zu erhalten. Es wird eine QObject zurückgegeben, die Sie in den gewünschten Typ umwandeln können.