2016-08-01 19 views
0

Ich habe eine Benutzeroberfläche, die eine TableView verwendet. Es hat 3 Spalten. Die letzte Spalte hat eine ComboBox. Alle Daten werden mit dem Delegaten eingefügt. Das Problem ist, dass ich keine Methode finden kann, ein Signal an einen öffentlichen Slot der Benutzeroberflächenklasse zu senden, wenn der Combobox-Index geändert wird. Mit dem Delegaten kenne ich bereits den aktuellen Index. Kennt jemand eine Methode, um diesen Index an die UI zu senden? Ich glaube nicht, dass die einzige mögliche Lösung mit Signalen und Slots ist. Ist eine direkte Lösung, um diese Daten zu extrahieren?So senden Sie ein Signal vom Delegaten

EDIT

Was ich verstehe, ich bin es, so etwas zu tun haben:

void Delegate :: setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const 
{ 
if(index.column() == COL_Coordonate) // test if we are at the last column 
    { 
     QComboBox *comboBox = static_cast<QComboBox*>(editor); 
     model -> setData(index, comboBox -> currentIndex(), Qt::EditRole); 
     emit dataChanged(comboBox -> currentIndex(),comboBox -> currentIndex()); // something like this you have in mind? 
    } 

} 

Und wie kann ich erhalten, dass Index in der Benutzeroberfläche? Ich eröffne mein Modell in so etwas wie:

QStandardItemModel *model; 
Delegate *mydelegate; 

und nutzen sie mag:

mydelegate = new Delegate(this); 
model = new QStandardItemModel(0, 3, this); // I add rows dynamically 
ui -> tableView -> setModel(model); 
ui -> tableView -> setItemDelegate (mydelegate); 

ich fügen Sie Daten mit den Delegierten, wenn ich eine Taste drücken. Muss ich einen Slot von dieser Schnittstelle auslösen? Wenn ja, kann jemand bitte ein Beispielcode zur Verfügung stellen, wie mache ich das?

+0

Der Delegierte darf keines der Signale des Modells ausgeben. Das ist die Aufgabe des ** Modells **: Es gibt diese Signale bereits aus. Sie müssen Ihren Code (einen Slot oder einen Funktor) mit dem Modell verbinden: 'connect (model, & QAbstractItemModel :: dataChanged, this, [=] (const QModelIndex & index) {/ * Ihr Code hier * /});' –

+0

Wenn Sie Beispiele suchen, suchen Sie z auf meinem Benutzer für 'QAbstractItemModel' oder' QStandardItemModel' oder 'QListView' oder' QTableView'. –

Antwort

1

Sie haben eine QComboBox Instanz. Sie können sich mit seinen Signalen verbinden. Was weißt du nicht? In jedem Fall sollten Sie keine Verbindung zum Delegaten herstellen: Dies ist ein Implementierungsdetail der Ansicht. Sie sollten mit dem Modell interagieren, nicht mit der Ansicht. Verbinden Sie das ModelldataChanged Signal!

+0

Ich bin neu auf Qt und ich habe fast 0 Erfahrung in Model View. Kannst du ein Beispiel geben? Ich werde eine Probe von Kabeljau in der Bearbeitung bearbeiten. – student

Verwandte Themen