2010-06-23 13 views
24

पर मेरे पास QTableWidget है और कॉलम हेडर पर क्लिक करते समय CTRL दबाकर पूरे कॉलम को चिह्नित करना होगा। कॉलम इंडेक्स प्राप्त करने के लिए कोई समस्या नहीं है क्योंकि अनुभाग सिग्नल दबाया गया है जो मुझे कॉलम का वर्तमान अनुक्रमणिका क्लिक करता है। जब कॉलम पर क्लिक किया जाता है तो मैं किसी भी कीबोर्ड संशोधक की स्थिति कैसे प्राप्त कर सकता हूं?माउस पर संशोधक कुंजी का पता लगाने के लिए कैसे करें Qt

उत्तर

28

आज़माएंजो हमेशा उपलब्ध है

क्यूटी 5 पर, QGuiApplication::keyboardModifiers() पर आज़माएं।

+0

मुझे यह सब मिला – tfl

+0

अब मैं इस जवाब पर ठोकर खा रहा हूं! जब मैं सब कुछ एक गन्दा उप-वर्ग के रूप में पुनः लिखता हूं तो मैं 'ईवेंट' ऑब्जेक्ट पर प्राप्त कर सकता हूं :-) डी ओह! –

+0

@Freedom_Ben के समान मैं उप-वर्गीकरण या घटना-फ़िल्टर का सुझाव देने वाले सभी उदाहरणों को भी देख रहा था ... लेकिन मेरे दृढ़ता के लिए धन्यवाद (यह आलस्य हो सकता है: पी) कि मुझे यह जवाब मिला। एक आकर्षण की तरह काम करता है ... जैसा कि मैं चाहता था! उसकी मदद के लिए धन्यवाद Roku! – zeFree

7

कीबोर्ड संशोधक कुंजी की स्थिति संशोधक() फ़ंक्शन को QInputEvent से विरासत में कॉल करके पाई जा सकती है।

http://doc.qt.io/qt-5/qmouseevent.html

+0

मुझे पता है, लेकिन मैं जुड़े स्लॉट के भीतर कोई वस्तु तो अन्य स्तंभ अनुक्रमणिका sectionPressed किया है। कोई घटना नहीं, कोई प्रेषक नहीं, कुछ भी नहीं। – tfl

+0

शायद आप modifiersEvent में संशोधक स्थिति को सहेज सकते हैं जो संकेत से पहले होना चाहिए। –

3

यह वास्तव में कष्टप्रद है, मैं एक eventFilter स्थापित करने और इसलिए

तरह दबाया गया था हटाने sectionPressed हैंडलर

ui->tableWidget->horizontalHeader()->viewport()->installEventFilter(this); 

eventFilter मैं एक प्रमुख मौसम की जांच कर सकते भीतर करने के लिए है

bool MainWindow::eventFilter(QObject *object, QEvent *event) 
{ 
    if(event->type() == QEvent::MouseButtonPress) 
    { 
     if(Qt::ControlModifier == QApplication::keyboardModifiers()) 
     { 
      QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); 
      if(mouseEvent) 
      { 
       if(mouseEvent->button()== Qt::LeftButton) 
       { 
        ui->tableWidget->selectColumn(ui->tableWidget->itemAt(mouseEvent->pos())->column()); 
        return true; 
       } 
      } 
     } 
    } 

    return QWidget::eventFilter(object,event); 
} 
2

यह मेरे लिए काम करता है।

if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) { 
4

आप का उपयोग करने के QGuiApplication::queryKeyboardModifiers() जो सरल है का उपयोग कर सकते हैं:

if(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier)) 
{ 
    // Do a few things 
} 
संबंधित मुद्दे