QTreeView - Suche Signal für Auswahl mit Pfeiltasten

Alles rund um die Programmierung mit Qt
Antworten
stimpy
Beiträge: 64
Registriert: 7. März 2006 17:05

QTreeView - Suche Signal für Auswahl mit Pfeiltasten

Beitrag 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!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QItemSelectionModel * selectionModel () const
void QItemSelectionModel::currentChanged ( const QModelIndex & current, const QModelIndex & previous )
stimpy
Beiträge: 64
Registriert: 7. März 2006 17:05

Beitrag 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!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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 &)));
stimpy
Beiträge: 64
Registriert: 7. März 2006 17:05

Ups!

Beitrag von stimpy »

Oh, das hatte ich glatt übersehen. Vielen Dank!
Antworten