[gelöst] Nach Button-Klick Zeile aus QTableView auslesen

Alles rund um die Programmierung mit Qt
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

[gelöst] Nach Button-Klick Zeile aus QTableView auslesen

Beitrag von Ozzy »

Hi,

ich habe ein TableView, indem die ersten Werte "normale" Textfelder sind, und das letzte einen Button enthält (per delegate). Nun möchte ich gerne die Werte der Zeile auslesen, wenn ich auf den Button klicke.
Ein Klick auf den Button löst ein Signal aus, welche eine Funktion aufruft, die diese Daten nun weiterverwenden soll.
Könnt Ihr mir sagen, wie ich an die Zelleninhalte (wie gesagt nur aus der Zeile, in der der Button ist) herankomme?

MfG, und vielen Dank im Voraus, Ozzy
Zuletzt geändert von Ozzy am 12. November 2007 14:07, insgesamt 1-mal geändert.
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Beitrag von Ozzy »

Aber wie komme ich da aus der Methode, die durch den Button-Klick aufgerufen wurde, dran???
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

Ohne deinen Code zu kennen, kann ich nur raten...

Code: Alles auswählen

tableView->currentIndex().row()
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Beitrag von Ozzy »

Moin, das geht wohl leider nicht so.
Hier mal was von meinem Code:

Code: Alles auswählen

QWidget *ButtonDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const {
	if (index.column() == 4) {
		QPushButton *button = new QPushButton( "Edit Parameter", parent );
		connect( button, SIGNAL( clicked() ), this, SLOT( buttonclicked() ) );
		return button;
	}	
	else return QItemDelegate::createEditor( parent, option, index );
}

void ComboBoxDelegate::buttonclicked() {
	Dialog dialog;
	dialog.setValue( Hier möchte ich die Daten übergeben );
	dialog.exec();
}
Und da kann ich doch nicht so einfach auf mein TableView zurückgreifen...
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

In createEditor() hast Du doch den Index schon... ansonsten ist der parent deines Delegate wohl die View, so kannst du auch drauf zugreifen...
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Beitrag von Ozzy »

Hi,

aber wie kann ich denn dann aus der buttonclicked() -Methode aus aufrufen? Mit parent bekomme ich da nur nur den Button...

MfG Ozzy
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Beitrag von Ozzy »

Hi,

also ich komme echt nicht weiter, ich habe echt keine Ahnung, wie ich an den Zeileninhalt herankommen kann, oder auch an die Zeilennummer, also aus dem Slot heraus...
Habt Ihr da nicht eine Idee für mich?

Also ich habe es mit:

Code: Alles auswählen

QPushButton *button_sender = qobject_cast<QPushButton*>(sender());
QTableView *table = qobject_cast<QTableView*>( button_sender->parent()->parent() );
qDebug() << table->currentIndex();
probiert, aber da bekomme ich immer nur:
QModelIndex(-1,-1,0x0,QObject(0x0) )
heraus.
Bin echt langsam am verzweifeln...

Nachtrag: also ich habe jetzt schon mal herausgefunden, dass wenn ich eine Zelle markiere, und dann auf den Button klicke, ich auch Infos zu der zelle bekomme. Aber warum setzt er nicht selber einen "Focus" auf die Zelle, in der der Button ist? Oder wie macht man so etwas?

MfG, Ozzy
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Beitrag von Ozzy »

Hat denn keiner von Euch eine Idee, wie das gehen könnte?
Oder vielleicht, wie man das sonst machen könnte???

MfG, Ozzy
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wie ist dein Button in die View gekommen? Kann eigentlich nur über das Delegate sein, also handle es auch über das Delegate ab.
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Beitrag von Ozzy »

Hi,

wie ich den Button einfüge, habe ich ja oben gepostet (den code), also wie Du schon richtig schreibst, über das delegate. Aber wie handel ich dann den Click über das delegate ab???

mfG, Ozzy
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ok, hatte nur die Hälfte gelesen.

Also, du setz per Delegate ein QPushButton in die Zelle rein. D.h. du machst einen Doppelklick auf die Zelle, dann erscheint der QPushButton, dann machst du einen Klick auf den Button. Sehr Benutzerfreundlich...

Du könntest von QPushButton ableiten, und der Ableitung das Model und die Zelle mitteilen und den Dialog dann vom abgeleiteten QPushButton aufrufen.

Du könntest aber auch den Button im paint-Event mittels der QStyle-Funktionen zeichnen und dann den Button-Click mittels QAbstractItemDelegate::editorEvent abfangen.
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Beitrag von Ozzy »

Hi,

nein, also man muss keinen Doppelklick drauf machen, dafür habe ich ein
tableView->openPersistentEditor( model->index(row, column, QModelIndex()) );
Also ohne Doppelklick in der Zelle gleich ein Klick auf den Button...

Aber mit den anderen Sachen konnte ich Dir noch ganz folgen. Du meinst also, mit der SIGNAL/SLOT-Methode ist das nicht so gut???

MfG, Ozzy
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du könntest von QPushButton ableiten, und der Ableitung das Model und die Zelle mitteilen und den Dialog dann vom abgeleiteten QPushButton aufrufen.
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Beitrag von Ozzy »

Hi,

sorry, wenn ich noch einmal nachfragen muss, aber was bedeutet denn ableiten? Bisher kenne ich das nur aus der Mathematik...

MfG, Ozzy
Antworten