2013-01-14 27 views
9

पहचाने नहीं गए हैं मैंने http://doc.qt.digia.com/4.6/gestures-imagegestures.html से "छवि जेस्चर उदाहरण" की कोशिश की। इस उदाहरण में आपके पास केवल 3 इशारा है: PanGesture, PinchGesture और SwipeGesture। लेकिन क्यूटी 5 जेस्चर प्रदान करता है:क्यूटी, जेस्चर। टैप एंडहोल्ड और स्वाइप

  • TapGesture
  • TapAndHoldGesture
  • PanGesture
  • PinchGesture
  • SwipeGesture

आदेश सभी 5 इशारों हम ImageWidget-निर्माता में लिखने की ज़रूरत को पहचान करने के लिए :

grabGesture(Qt::TapGesture); 
grabGesture(Qt::TapAndHoldGesture); 
grabGesture(Qt::PanGesture); 
grabGesture(Qt::PinchGesture); 
grabGesture(Qt::SwipeGesture); 

मैं विधि gestureEvent() भी

bool ImageWidget::gestureEvent(QGestureEvent *event) 
{ 
    if (QGesture *swipe = event->gesture(Qt::SwipeGesture)) 
     swipeTriggered(static_cast<QSwipeGesture *>(swipe)); 
    else if (QGesture *pan = event->gesture(Qt::PanGesture)) 
     panTriggered(static_cast<QPanGesture *>(pan)); 
    if (QGesture *pinch = event->gesture(Qt::PinchGesture)) 
     pinchTriggered(static_cast<QPinchGesture *>(pinch)); 
    if (QGesture *tap = event->gesture(Qt::TapGesture)) 
     tapTriggered(static_cast<QTapGesture *>(tap)); 
    if (QGesture *tapandhold = event->gesture(Qt::TapAndHoldGesture)) 
    { 
     tapandholdTriggered(static_cast<QTapAndHoldGesture *>(tapandhold)); 
     } 
    return true; 
} 

और लिखने लापता तरीकों

void ImageWidget::tapTriggered(QTapGesture *gesture) 
{ 
    qDebug() << "TAP" << gesture->position(); 
} 

void ImageWidget::tapandholdTriggered(QTapAndHoldGesture *tapandhold) 
{ 
    qDebug() << "TAPANDHOLD"; 
} 

की तरह जोड़ा तो, मेरे सवाल, क्यों इशारों स्वाइप करें और TapAndHold मान्यता प्राप्त नहीं हैं है? ये इशारे समान रूप से तीन संकेतों के रूप में लागू होते हैं जिन्हें पहचाना जाता है (पैन, पिंच और टैप)। यह क्यों काम नहीं करता है?

मैं तुम्हें मदद

+0

क्या आपको यह पता चला? मैं QListWidget में इशारा कैप्चरिंग को समझने की भी कोशिश कर रहा हूं। –

+0

क्या आपने इसे हल किया है? मुझे भी एक ही समस्या का सामना करना पड़ रहा है। – Tarantula

उत्तर

0

के लिए अग्रिम क्यूटी का नवीनतम संस्करण का प्रयास करें धन्यवाद (और आप अपने ओएस या डिवाइस का उल्लेख नहीं है।) मैं नहीं जानता कि नवीनतम संस्करण बेहतर होगा, लेकिन मुझे पता है कि लगभग एक साल पहले, पूरे ढेर (एक्स 11 इवेंट्स, डिवाइस ड्राइवर, ऑपरेटिंग सिस्टम सपोर्ट इत्यादि) प्रवाह और अपूर्ण थे। उदाहरण के लिए, जैसा कि मैंने याद किया, जब मैंने कोशिश की, विंडोज़ पर क्यूटी में केवल इशारा करते थे, और लिनक्स/उबंटू (कैनोनिकल से) प्रगति पर था।

2

फिर से, यदि आप अपने प्लेटफॉर्म का वर्णन करते हैं और हार्डवेयर को स्पर्श करते हैं तो इससे मदद मिलेगी।

एक ऐप्पल टचपैड का उपयोग करते हुए ओएसएक्स, क्यूटी 5, पीईक्यूटी पर, मैंने पाया कि कुछ इशारा घटनाएं तब तक नहीं पहुंचीं जब तक कि आप QEventureOverride के QEvent को स्वीकार नहीं करते। दस्तावेज इस तरह के एक कार्यक्रम के उद्देश्य के बारे में बहुत अस्पष्ट है। दस्तावेज़ीकरण कहता है कि डिफ़ॉल्ट रूप से अनदेखा किया जाता है, जो असाधारण है: अधिकांश अन्य इशारा डिफ़ॉल्ट रूप से स्वीकार किए जाते हैं, जिसका अर्थ है कि एक ही इशारा के लिए और घटनाएं आती हैं।

इशारे के लिए "स्वीकार" का यह अर्थ घटनाओं के लिए "स्वीकार" के सामान्य अर्थ से अलग है। ऐसा लगता है कि "स्वीकार करें" का अर्थ है "घटनाओं को आने दें" जबकि "घटना" स्वीकार करने का अर्थ है "इस घटना को विगेट्स की श्रृंखला के माध्यम से प्रचारित न करें।" साथ ही, डॉक्स एक QGestureEvent को स्वीकार करने के बारे में बहुत भ्रमित हैं जो एक QGesture स्वीकार करते हैं। एक QGestureEvent QGestures का एक संयुक्त है। यह बहुत भ्रमित है कि QGestureEvent को स्वीकार करना निहित संकेतों को स्वीकार करने जैसा ही है। ध्यान दें कि QGesture एक को स्वीकार() नहीं है विधि, और QGestureEvent कई अतिभारित और सुविधा के तरीकों है: स्वीकार करते हैं(), setAccepted (bool), setAccepted (इशारा, bool), setAccepted (gestureType, bool), आदि

QEestureOverride प्रकार के QEvent पर वापस: Qt.QEvent गणना "Qt.QGestureOverride ... (QGestureEvent)" दिखाती है जो मेरे लिए है QGestureOverride प्रकार की एक घटना QGestureEvent का उप-वर्ग है, लेकिन यह नहीं है: कोई इशारा नहीं है() QGestureOverride प्रकार की घटना पर विधि। (तो कैसे पता चलता है कि आप किस तरह का इशारा ओवरराइड स्वीकार कर रहे हैं?) और ऐसा लगता है कि घटना को अनदेखा करने का डिफ़ॉल्ट सिर्फ इसे प्रसारित करने की अनुमति नहीं दे रहा है, लेकिन निहित (एसआईसी) संकेतों के लिए बाद की घटनाओं को रोक रहा है (जो कुछ भी हो)

उदाहरण के लिए, मेरे परीक्षण, एक वास्तविक, दो-उंगली किसी भी इशारा घटनाओं प्रकार पिंच का भाव होने उत्पन्न कभी नहीं चुटकी में से कुछ में, लेकिन, प्रकार पान की उत्पन्न जब तक मैं प्रकार QGestureOverride की QEvent स्वीकार कर लिया था। फिर, पिंच इशारा घटनाएं पहले आईं, और बाद में पिंच और पैन इशारा दोनों घटनाएं, जब मैंने अपनी दो अंगुलियों को पेंच किया, जैसे मैंने चुरा लिया, या मैंने चुरा लिया। (कम से कम ओएसएक्स ट्रैकपैड पर ध्यान दें, एक पैन (एक स्क्रॉल ऑपरेशन) दो अंगुलियों के साथ है, जैसा डिवाइस डिवाइस या नियंत्रण कक्ष द्वारा परिभाषित किया गया है?)