2013-05-14 4 views
7

मैं QMenuBar से QMenu आइटम पर माउस क्लिक को अनुकरण करने की कोशिश कर रहा हूं, उदाहरण के लिए QTestLib ढांचे का उपयोग करके "सहेजें के रूप में" QAction पर क्लिक करना।क्यूटी यूआई परीक्षण: QTest का उपयोग कर QMenuBar आइटम पर क्लिक को अनुकरण कैसे करें?

मैं इसे विंडोज एक्सपी 32 बिट और क्यूटी 5.0.2 के तहत परीक्षण कर रहा हूं।

कोई विचार?

+0

समझने में आपकी सहायता कर सकता है कि यह क्या हासिल करेगा? बस 'क्यूएक्शन :: ट्रिगर() 'पर कॉल करें। – cmannett85

+0

मैं यूआई के लिए एक स्वचालित परीक्षण ऐप बनाने की कोशिश कर रहा हूं। –

+0

यह मूल रूप से मैं भी करना चाहता हूं। मुझे लगता है कि यहां जटिलता यह है कि क्यूमेनू प्रत्येक क्यूएक्शन के लिए विजेट नहीं बनाता है: मेनू आइटम सीधे मेनू के आयत पर सीधे खींचे जाते हैं। – fatuhoku

उत्तर

-1

आपको QTest::mouseClick फ़ंक्शन का उपयोग करना चाहिए। यह किसी भी QWidget पर क्लिक अनुकरण करेगा। मैंने पाया है कि एक QMenu पर क्लिक करने का प्रयास कर रहा है जो अवरुद्ध कॉल का कारण यूनिट परीक्षण के साथ काम नहीं करेगा।

+2

कोई अच्छा जवाब नहीं है क्योंकि समस्या विशेष रूप से एक तत्व पर "एक क्लिक करें ..." मेनू पर क्लिक को अनुकरण करने में सक्षम है। यहां तक ​​कि यदि आप "फ़ाइल" मेनू बटन पर क्लिक को अनुकरण कर सकते हैं, तो मेनू प्रदर्शित होता है, मेनू आयत में कहीं भी "इस रूप में सहेजें ..." भाग है लेकिन आप उस पर क्लिक कैसे अनुकरण करते हैं? पहुंचने के लिए कोई बच्चा विजेट नहीं है (या वहां है?)। – user405

+0

यह उत्तर गलत है। चूंकि प्रश्न एक QAction पर माउस क्लिक करें। लेकिन QAction को QWidget से विरासत में नहीं मिला है। इस प्रकार यह समाधान पूरी तरह से झूठा है। – LAL

5

शायद यह प्रश्न प्रश्न मालिक के लिए प्रासंगिक नहीं है, लेकिन मुझे लगता है कि यह दूसरों के लिए सहायक हो सकता है।

QToolBar के विपरीत, QMenu में widgetForAction विधि नहीं है। मुझे इस मामले के लिए एक सरल कामकाज मिला। QTest::mouseClick के साथ पॉपअप मेनू आज़माएं यदि कुछ भी नहीं होता QTest::keyClick(..., first_char_in_menu_tite, Qt::AltModifier) का उपयोग करने का प्रयास करें। कार्रवाई निष्पादन अनुकरण करने के लिए आप Qt::Key_Down के साथ कार्रवाई तक पहुंच सकते हैं जब तक आप इसे प्राप्त न करें और फिर Qt::Key_Enter दबाएं। मुझे लगता है कि निम्नलिखित कोड आपको

QMenu *menu = getMenu(mainWindow, menuName); 
if (menu != nullptr) { 
    QTest::keyClick(mainWindow, menu->title().at(1).toLatin1(), Qt::AltModifier); 
} 


QList<QAction *> actions = menu->actions(); 
foreach (QAction *action, actions) { 
    if (action->objectName() == actionName) { 
     QTest::keyClick(menu, Qt::Key_Enter); 
     break; 
    } 
    QTest::qWait(1000); 
    QTest::keyClick(menu, Qt::Key_Down); 
} 
+0

मैंने एक समान उदाहरण बनाया लेकिन यहां QComboBox के लिए। QMenu एक पोस्ट करने के लिए धन्यवाद! https://gist.github.com/peteristhegreat/cbd8eaa0e565d0b82dbfb5c7fdc61c8d – phyatt

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