2010-07-15 10 views
5

मेरी क्यूटी जीयूआई आवेदन में, मैं आदेश के माध्यम से संकेत बोल रहा हूँ:क्यूटी अनुप्रयोग से कॉलिंग कमांड प्रॉम्प्ट बिना ठंडे?

system("lots.exe & of.exe && commands.exe"); 

यह कमांड प्रॉम्प्ट खुल जाता है (जैसे मैं इसे करना चाहते हैं), लेकिन क्यूटी जीयूआई आवेदन जब तक मैं और कमांड प्रॉम्प्ट बंद जमा। क्या इसे रोकने के लिए कोई रास्ता है? मैंने देखा कि एक क्यूप्रोसेस क्लास है, लेकिन कमांड प्रॉम्प्ट लाने के लिए इसे प्राप्त नहीं किया जा सकता है।

किसी भी मदद की सराहना की जाएगी!

+0

क्या "&&" काम करता है? मैं उम्मीद करता हूं कि यह काम न करे, क्योंकि यह खोल (cmd.exe, bash, आदि) का सिंटैक्स होना चाहिए और QProcess इसे संभाल नहीं लेता है। संपादित करें: बेवकूफ मुझे, यह अभी भी सिस्टम है() ... –

उत्तर

7

QProcess वास्तव में उत्तर है। यदि आप system() जैसे कुछ का उपयोग करना चाहते हैं तो आपको या तो कॉल को किसी अन्य थ्रेड में रखना होगा या popen या अपने प्लेटफ़ॉर्म के लिए कुछ समान उपयोग करना होगा।

QProcess में setReadChannel है जो आप आउटपुट दिखाने के लिए अपनी स्वयं की कंसोल विंडो प्रदर्शित करने के लिए उपयोग कर सकते हैं।

1

आपको बस उस सिस्टम कॉल को एक अलग थ्रेड में रखना होगा।

+2

QProcess उपलब्ध होने पर ऐसा करने की कोई आवश्यकता नहीं है। इसके अलावा थ्रेड को बाधित करने का कोई अच्छा तरीका नहीं होगा, जबकि इसे सिस्टम() में अवरुद्ध किया गया था, जो अंतर्निहित .exe लंबे समय तक (या कभी भी) –

+0

से बाहर नहीं निकलता है, जो सिस्टम के साथ एक सामान्य समस्या है (), मैं सहमत हूँ :) –

1

यदि आपको किसी आउटपुट की आवश्यकता नहीं है, तो सबसे आसान तरीका QProcess :: startDetached() का उपयोग करना होगा।

http://doc.qt.io/archives/4.6/qprocess.html#startDetached

आप उत्पादन, QtConcurrent की जरूरत है, तो :: एक futurewatcher उत्पादन युक्त कम भूमि के ऊपर/QThread पाने से काम किया जाएगा के साथ चलाते हैं।

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