2010-01-27 28 views
6

Tengo un QTableView en el que estoy mostrando un modelo personalizado. Me gustaría coger un click derecho del ratón para que pueda abrir una gota menú contextual sobre los datos de tabla subyacente:Qt4: eventos del botón del mouse de QTableView no detectados

MainWindow::MainWindow() 
{ 
    QTableView * itsView = new QTableView; 
    itsView->installEventFilter(this); 
    ... //Add other widgets and display them all 
} 

bool MainWindow::eventFilter(QObject * watched, QEvent * event) 
{ 
    if(event->type() == QEvent::MouseButtonPress) 
    printf("MouseButtonPress event!\n"); 
    else if(event->type() == QEvent::KeyPress) 
    printf("KeyPress event!\n"); 
} 

Extrañamente, consigo todos los eventos KeyPress correctamente: cuando tengo una celda resaltada y pulse una clave, aparece el mensaje "KeyPress!!". Sin embargo, solo recibo el mensaje "MouseButtonPress evento!" cuando hago clic en el borde muy fino que rodea toda la tabla.

Respuesta

10

Se debe a que Tableview es este borde delgado ... Si desea acceder al contenido del widget, en su lugar debe instalar su eventFilter en la ventana Tableview!

En consecuencia, propongo:

QTableView * itsView = new QTableView; 
itsView->viewport()->installEventFilter(this); 

Prueba esto, se debe solucionar su problema!

Espero que ayude!

+1

Más de seis años después y esta respuesta simplemente me ahorró un montón de tiempo y molestia. ¡Gracias! – GuyGizmo

+1

@GuyGizmo Me alegra oír eso :) Gracias por visitarnos;) –

2

Si necesita mostrar un menú contextual, puede usar la señal customContextMenuRequested del tableview; deberá configurar la política del menú contextual en Qt::CustomContextMenu para que se active esta señal. Algo como esto:

... 
itsView->setContextMenuPolicy(Qt::CustomContextMenu); 
QObject::connect(itsView, SIGNAL(customContextMenuRequested(const QPoint &)), 
       this, SLOT(tableContextPopup(const QPoint &))); 
... 

void MainWindow::tableContextPopup(const QPoint & pos) 
{ 
    qDebug() << "show popup " << pos; 
} 

Espero que esto ayude, saludos.

Cuestiones relacionadas