2010-01-27 11 views
6

मेरे पास QTableView है जिसमें मैं एक कस्टम मॉडल प्रदर्शित कर रहा हूं। मैं सही माउस क्लिक पकड़ने के लिए इतना है कि मैं अंतर्निहित तालिका डेटा पर डाउन मेनू एक प्रासंगिक ड्रॉप खोल सकते हैं करना चाहते हैं:Qt4: QTableView माउस बटन ईवेंट पकड़े नहीं गए

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"); 
} 

अजीब है, मैं ठीक से कुंजी दबाने की घटनाओं के सभी मिलती है: मैं जब एक सेल पर प्रकाश डाला और प्रेस एक कुंजी, मुझे "कुंजीपटल घटना मिलती है!" संदेश। हालांकि, मुझे केवल "माउसबटन प्रेस ईवेंट!" संदेश मिलता है जब मैं पूरी तालिका के आस-पास बहुत पतली सीमा पर क्लिक कर रहा हूं।

उत्तर

10

ऐसा इसलिए है क्योंकि टेबलव्यू इस पतली सीमा है ... यदि आप विजेट की सामग्री तक पहुंचना चाहते हैं, तो आपको टेबलव्यू के व्यूपोर्ट पर अपना ईवेंट इंस्टॉल करना चाहिए!

इसलिए मैं प्रस्ताव:

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

इस प्रयास करें, यह आपकी समस्या का समाधान करना चाहिए!

उम्मीद है कि यह मदद करता है!

+1

छह साल बाद और इस जवाब ने मुझे समय और परेशानी का एक गुच्छा बचाया। धन्यवाद! – GuyGizmo

+1

@GuyGizmo मुझे यह सुनकर खुशी हुई :) :) द्वारा रोकने के लिए धन्यवाद;) –

2

यदि आपको एक संदर्भ मेनू दिखाने की आवश्यकता है तो आप के customContextMenuRequested सिग्नल का उपयोग कर सकते हैं; इस सिग्नल को ट्रिगर करने के लिए आपको संदर्भ मेनू नीति को Qt::CustomContextMenu पर सेट करने की आवश्यकता होगी। इस तरह कुछ:

... 
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; 
} 

उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे