2012-07-01 13 views
6

क्यूटी के QKeyEvent मैं देख सकते हैं कि Ctrl पता चल सके कि ev->key()Qt::Key_Control है द्वारा दबाया गया था। लेकिन मैं बाएं और दाएं Ctrl कुंजी के बीच अंतर कैसे कर सकता हूं?क्यूटी वाम CTRL कुंजी कोड

मैं भी Alt और शिफ्ट चाबी के लिए एक ही बात की जरूरत है।

+1

आपको इसकी आवश्यकता क्यों होगी? यह एक उपयोगिता दुःस्वप्न होगा। उपयोगकर्ता के लिए, वे चाबियाँ समान होती हैं, और आप उस समय के आधार पर उनका उपयोग करते हैं, जो भी आपकी निकटतम उंगली के करीब है। ऐसी चीजें केवल गेम के लिए समझ में आती हैं। क्या यह एक खेल है? –

+1

@ क्यूबाओबर एक उपयोग केस कीबोर्ड शॉर्टकट्स है। उदाहरण के लिए बाएं Alt + Shift विंडोज़ पर कीबोर्ड बदलता है। यहां भेद महत्वपूर्ण है। –

+0

@ एंड्रयू-डुफ्रेसन यह कितना महत्वपूर्ण है? ओएस कुंजीपटल स्विचिंग शॉर्टकट को संभालता है, एप्लिकेशन इसके बारे में कुछ भी नहीं कर सकता है। यह बस दाएं Alt प्राप्त करेगा, कभी नहीं छोड़ा। दोनों को अलग करने में सक्षम होने से व्यवहार में कोई बदलाव नहीं आएगा, इसलिए यह व्यर्थ है। –

उत्तर

3

जहां तक ​​मुझे पता है, शुद्ध Qt विधियों का उपयोग करके ऐसा करने का कोई तरीका नहीं है।

अपने प्लेटफ़ॉर्म के आधार पर, आप QKeyEvent::key() के बजाय QKeyEvent::nativeScanCode() विधि का उपयोग कर कुंजी के बीच अंतर करने में सक्षम हो सकते हैं।

उदाहरण के लिए, विंडोज पर आप परीक्षण करने के लिए इस प्रकार है जो Ctrl कुंजी दबाने था सक्षम होना चाहिए:

if (event->nativeScanCode() == VK_LCONTROL) { 
    // left control pressed 
} else if (event->nativeScanCode() == VK_RCONTROL) { 
    // right control pressed 
} 
+0

तो Windows 'nativeScanCode() 'में http://msdn.microsoft.com/en-us/library/ms927178.aspx के अनुसार वापस लौटना चाहिए जो शायद यह नहीं कर रहा है। तो मुझे लगता है कि मुझे सामान्य अल्फा/संख्याओं और नियंत्रण कुंजी के बीच अंतर करने की आवश्यकता है। लेकिन जेनेरिक फ़ंक्शन जो यह बताता है वह अल्फा/न्यूमेरिक कुंजी है और यह एक एएलटी/शिफ्ट/CTRL/बैक/..... कुंजी है? –

+0

@ डिप्रोसेन: बस 'VK_LCONTROL' आदि – houbysoft

+0

के खिलाफ परीक्षण करने का प्रयास करें? क्या यह आसान है? मैं बस बेवकूफ सोच रहा था कि यह काम करेगा या नहीं। हालांकि बाएं/दाएं कुंजी का इलाज करना बुरा है? –

1

बाएं और दाएं कुंजी आभासी कुंजी कोड का हिस्सा हैं ->() की तुलना करने के nativeVirtualKey का उपयोग nativescancode() के बजाय विंडोज़ VK_ * enums के साथ।

1

Qt Namespace Reference के अनुसार, enum Qt::KeyQt::Key_Alt और Qt::Key_AltGr के लिए एक अलग मूल्य है।

हालांकि, enum Qt::KeyboardModifier और enum Qt::Modifier विभिन्न संशोधक के रूप में कुंजी की जोड़ी नहीं देखते हैं।

(ध्यान दें: मैं एक टिप्पणी के रूप में इस पोस्ट किया है, लेकिन मैं काफी प्रतिनिधि अभी तक नहीं है।)

0

VK_RCONTROL काम नहीं करते हैं, तो ctrl-सही के अपने nativeScanCode मूल्य की जाँच करें:

std :: cout < देशी स्कैनकोड(); और इस मान का उपयोग करें:

int control_right = 285; यदि (कुंजी-> देशी स्कैनकोड() == control_right) {...

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