Seite 1 von 1

QTreeView - Suche Signal für Auswahl mit Pfeiltasten

Verfasst: 13. Juni 2006 10:21
von stimpy
Hallo,

ich habe eine Baumansicht nebst Modell. In diesem Baum gibt es ja eine Art Cursor, der per Click oder Pfeiltaste über die Baumelemente bewegt werden kann. Ich möchte eine Signal haben, wenn der Cursor das Feld "betritt", unabhängig davon, ob dies durch Maus oder Tastatur geschah.

An Signalen habe ich gefunden: activated, clicked, doubleClicked, entered, pressed
...und habe damit ein paar Tests gemacht:

Code: Alles auswählen

QObject::connect( treeview, SIGNAL(activated(QModelIndex)),
                        model, SLOT(hello_activated(QModelIndex)) );
Keines der Signale reagiert, wenn ich per Pfeiltaste den Cursor verschiebe.
Was kann ich dann tun, wenn mir QT nix anbietet?
Oder habe ich etwas falsch gemacht?

Vielen Dank!

Verfasst: 13. Juni 2006 15:08
von upsala
QItemSelectionModel * selectionModel () const
void QItemSelectionModel::currentChanged ( const QModelIndex & current, const QModelIndex & previous )

Verfasst: 14. Juni 2006 12:07
von stimpy
Danke für die knappe aber präzise Antwort. :-)
Ich habe das jetzt so gelöst:

Code: Alles auswählen

class QXTreeView : public QTreeView
{
	Q_OBJECT
protected slots:
	virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous);	
signals:
	void focusChanged( const QModelIndex & index );
};

Code: Alles auswählen

void QXTreeView::currentChanged( const QModelIndex &current, const QModelIndex &previous )
{
	QTreeView::currentChanged( current, previous );
	emit focusChanged( current );
}
Ich habe die QTreeView Klasse abgeleitet und den Slot so überschrieben,
daß ich noch ein Extra-Signal erzeuge, was mir die gewünschte Info liefert.

Ist doch so in Ordnung, oder? (Funktionieren tut's.)
Ist dieses Ableiten und Modifizieren bei QT die übliche Methode?

Danke!

Verfasst: 14. Juni 2006 21:25
von upsala
So sollte es aber auch gehen:

Code: Alles auswählen

connect(treeview->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),  model, SLOT(hello_activated(QModelIndex &)));

Ups!

Verfasst: 15. Juni 2006 08:25
von stimpy
Oh, das hatte ich glatt übersehen. Vielen Dank!