c++ - Activate window -
मेरे पास QMainWindow है इसके पास इस पैरामीटर हैं:
this-> सेट विन्डो फ्लेग्ज (क्यूटी :: टूल); इस- & gt; setFocusPolicy (क्यूटी :: StrongFocus); इस- & gt; setAttribute (क्यूटी :: WA_QuitOnClose, सच);
शोएवेंट कॉल के बाद मेरी विंडो दिखायी जाती है लेकिन अप्रतिष्ठित है। मैंने अधिभार शो फ़ंक्शन की कोशिश की:
... QMainWindow :: showEvent (event); इस- & gt; activateWindow ();
संपादित करें: जब मैंने लाइन पर टिप्पणी की < कोड> इस- & gt; setWindowFlags (क्यूटी :: उपकरण);
सब कुछ ठीक है, लेकिन मुझे टूल-फ्लैग में आवश्यकता है।
क्यूटी संस्करण: 4.5.1
विंडोज मैनेजर निर्णय करता है
इससे पहले कि मैंने शुरू किया: जैसा कि मैंने बताया और खिड़कियों के लेआउट (जैसे टाइटल बार) पर फ़ोकस पॉलिसी और अन्य पहलुओं को संबंधित खिड़कियों के मैनेजर के लिए पर्याप्त विस्तार किया गया है, और क्यूटी में सीमित नियंत्रण हो सकते हैं। इसे देखने के लिए, बस एक उपयोगकर्ता इंटरफ़ेस को देखें जो कि "" नीति है इन मामलों में, विंडोज़ प्रबंधक क्यूटी के फोकस अनुरोध को अनदेखा कर सकता है। इस कारणों के लिए, क्यूटी दस्तावेज़ीकरण में से कई संबंधित झंडे "संकेत" कहते हैं नतीजतन, सुझाए गए समाधानों में से कुछ आपके लिए काम नहीं कर सकते हैं या हो सकता है।
QApplication :: setActiveWindow ()
यह बर्दाश्त नहीं, काम का उपयोग करने के लिए समाधान जीनोम के साथ विंडोज़ और उबंटू दोनों के लिए मेरे लिए मैं इसे निम्नलिखित कोड के साथ परीक्षण किया। माफ़ करना कि यह पायथन PyQt का उपयोग कर रहा है (मैं PyQt के बारे में कुछ जानने के लिए इस तरह के प्रश्नों का उपयोग करता हूं)। यह काफी आसान आप इसे पढ़ सकते हैं और यह सी ++ में अनुवाद करने के लिए किया जाना चाहिए
PyQt4 आयात QtCore वर्ग MainWindow से PyQt4 आयात QtGui से आयात sys (QtGui.QMainWindow):। डीईएफ़ __init __ (स्वयं, माता पिता = कोई नहीं): QtGui.QMainWindow .__ init __ (स्वयं) # मुख्य विंडो self.setGeometry (300, 300, 250, 150) self.setWindowTitle ( 'टेस्ट') # पाठ संपादक self.textEdit = QtGui.QTextEdit () self.setCentralWidget (self.textEdit) डीईएफ़ closeEvent (स्वयं, घटना):। QtGui.QApplication.instance () छोड़ () #main एप्लिकेशन = QtGui.QApplication (sys.argv) testWindow = MainWindow () testWindow.setWindowFlags (QtCore.Qt.Tool ) testWindow.show () app.setActiveWindow (testWindow) app.exec_ ()
ध्यान दें कि आप के पास घटना के कुछ से निपटने जोड़ने के लिए है कि testWindow
, क्योंकि ऐप स्वचालित रूप से बाहर नहीं निकलता यदि आप Qt :: Tool
विंडो को बंद कर देते हैं।
हड़बड़ीबोर्ड () हैक
यदि यह नहीं है आपके लिए काम, निम्न हैक हो सकता है मुझे लगता है कि आपके पास एक ऐप है जो सक्रिय है। फिर आप इनपुट रीडायरेक्ट करने के लिए उपयोग कर सकते हैं Qt :: उपकरण
विंडो फ़ोकस नहीं मिलती, लेकिन इनपुट प्राप्त करता है निम्नलिखित मुख्य कोड यह (अन्य कोड अपरिवर्तित रहता है)।
#main एप्लिकेशन = QtGui.QApplication (sys.argv) testWindow = MainWindow () testWindow.setWindowFlags (QtCore.Qt.Tool दर्शाता है ) testWindow2 = MainWindow () # दूसरी खिड़की जो सक्रिय testWindow2.show (है) testWindow.show () testWindow.textEdit.grabKeyboard () app.exec_ ()
असल में, जबकि खिड़की testWindow2
एक सक्रिय है, दर्ज किए गए सभी पाठ testWindow.textEdit
में दिखाई देते हैं। यह अच्छा नहीं है, मुझे पता है ...
अपनी खुद की खिड़की बनाना
आप सबसे अधिक लचीलेपन हासिल कर सकते हैं (और अपने लिए सबसे अधिक काम बना सकते हैं) अपना स्वयं का विंडो लेआउट रोल करना इस विचार को निम्नलिखित में वर्णित किया गया है।
अन्य "समाधान"
वांछित परिणाम प्राप्त करने के लिए आप संबंधित विंडो प्रबंधक के एपीआई फ़ंक्शन को सीधे कॉल कर सकते हैं (स्पष्ट रूप से पहली जगह में क्यूटी का उपयोग करने के लिए बहुत ही कारण के खिलाफ) आप क्यूटी स्रोत कोड को भी हुक कर सकते हैं। उदाहरण के लिए, यदि आप Qt :: Tool
फ्लैग को सेट करते हैं, तो Windows पर, क्यूटी फ़ंक्शन का उपयोग एक SW_SHOWNOACTIVATE
फ्लैग के साथ, शैली के साथ विंडो दिखाने के लिए करता है आप आसानी से SW_SHOWNOACTIVATE
को जो कुछ भी चाहते हैं उसे बदल सकते हैं लिनक्स समान होना चाहिए स्पष्ट रूप से भी अनुशंसित नहीं।
Comments
Post a Comment