Seite 1 von 2

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

Verfasst: 9. November 2007 16:04
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

Verfasst: 9. November 2007 16:06
von dhcase

Verfasst: 9. November 2007 16:13
von Ozzy
Aber wie komme ich da aus der Methode, die durch den Button-Klick aufgerufen wurde, dran???

Verfasst: 9. November 2007 16:15
von dhcase
Ohne deinen Code zu kennen, kann ich nur raten...

Code: Alles auswählen

tableView->currentIndex().row()

Verfasst: 9. November 2007 16:37
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...

Verfasst: 9. November 2007 16:44
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...

Verfasst: 9. November 2007 18:12
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

Verfasst: 10. November 2007 10:05
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

Verfasst: 11. November 2007 16:30
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

Verfasst: 11. November 2007 16:44
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.

Verfasst: 11. November 2007 17:01
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

Verfasst: 11. November 2007 18:34
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.

Verfasst: 11. November 2007 19:08
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

Verfasst: 11. November 2007 22:54
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.

Verfasst: 12. November 2007 06:46
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