2010-03-04 18 views
11

Tengo un QTableView del que necesito obtener el evento selectionChanged. Parece que no puedo hacer que la conexión funcione. Tengo:QTableView selectionChanged

MyWidget.h

...

protected slots: 
void slotLoadTransaction(const QItemSelection & selected, const QItemSelection & deselected); 
private: 
QTableView table; 

...

MyWidget.cpp

...

connect(
    table->selectionModel(), 
    SIGNAL(selectionChanged(const QItemSelection & selected, const QItemSelection & deselected)), 
    this, 
    SLOT(slotLoadTransaction(const QItemSelection & selected, const QItemSelection & deselected)) 
); 

...

En tiempo de ejecución, obtengo los errores "No such Signal".

Respuesta

14

Es necesario eliminar los nombres de las variables de las macros de señal y SLOT:

connect(
    table->selectionModel(), 
    SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), 
    SLOT(slotLoadTransaction(const QItemSelection &, const QItemSelection &)) 
); 

Connect está esencialmente mirando a la firma de la función y los nombres de las variables se confunda.

+2

+1 Pareces haber olvidado el "esto" en tu declaración (el parámetro entre SEÑAL y RANURAS) aunque, ¿no? –

+0

Andy, creo que me puedo dar cuenta de eso. Kaleb, gracias señor! Funciona como una joya :) –

+3

@Andy - No, lo dejé a propósito. La sintaxis anterior es más concisa y equivalente cuando el destinatario es "esto". Hay dos conexiones, un método de instancia de conexión (que utilicé) y un método estático. Vea los documentos para más información. –

Cuestiones relacionadas