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?
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 * /});' –
Wenn Sie Beispiele suchen, suchen Sie z auf meinem Benutzer für 'QAbstractItemModel' oder' QStandardItemModel' oder 'QListView' oder' QTableView'. –