विंडोज प्रबंधक
तय करता है कि इससे पहले कि मैं शुरू: जैसा कि elcuco और Javier से कहा, एक बड़ा करने के लिए नीति और खिड़कियों लेआउट के अन्य पहलुओं (जैसे शीर्षक पट्टी) अंतर्गत आता है ध्यान केंद्रित संबंधित खिड़कियों का विस्तार प्रबंधक, और क्यूटी का सीमित नियंत्रण हो सकता है। इसे देखने के लिए, बस एक उपयोगकर्ता इंटरफ़ेस देखें जिसमें "focus follows mouse" नीति है। इन मामलों में, विंडोज मैनेजर क्यूटी के फोकस अनुरोध को अनदेखा कर सकता है। इस कारण से, क्यूटी दस्तावेज कई संबंधित झंडे "संकेत" कहते हैं। नतीजतन, कुछ सुझाए गए समाधान आपके लिए काम कर सकते हैं या नहीं भी।
QApplication :: setActiveWindow()
यह बर्दाश्त नहीं, e.tadeu's समाधान दोनों Windows और Ubuntu Gnome के साथ के लिए मेरे लिए QApplication::setActiveWindow()
काम करता है का उपयोग करें। मैंने इसे निम्नलिखित कोड के साथ परीक्षण किया। क्षमा करें कि यह PyQt का उपयोग कर पायथन है (मैं पीईक्यूटी के बारे में कुछ सीखने के लिए इन तरह के सवालों का उपयोग करता हूं)। इसे पढ़ने और इसे C++ में अनुवाद करने के लिए यह काफी आसान होना चाहिए।
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self)
# main window
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Test')
# text editor
self.textEdit = QtGui.QTextEdit()
self.setCentralWidget(self.textEdit)
def closeEvent(self, event):
QtGui.QApplication.instance().quit()
#main
app = QtGui.QApplication(sys.argv)
testWindow = MainWindow()
testWindow.setWindowFlags(QtCore.Qt.Tool)
testWindow.show()
app.setActiveWindow(testWindow)
app.exec_()
नोट आप, testWindow
के पास घटना के कुछ से निपटने जोड़ने के लिए यदि आप एक Qt::Tool
विंडो को बंद क्योंकि एप्लिकेशन स्वचालित रूप से बाहर नहीं है।
grabKeyboard() हैक
यदि यह आप के लिए काम नहीं करता है निम्नलिखित हैक हो सकता है। मुझे लगता है कि आपके पास आपके एप्लिकेशन में एक विंडो है जो सक्रिय है। इनपुट को पुनर्निर्देशित करने के लिए आप grabKeyboard()
का उपयोग कर सकते हैं। Qt::Tool
विंडो फोकस नहीं पाती है, लेकिन इनपुट प्राप्त करती है। निम्नलिखित मुख्य कोड इसे प्रदर्शित करता है (दूसरा कोड अपरिवर्तित बनी हुई है)।
#main
app = QtGui.QApplication(sys.argv)
testWindow = MainWindow()
testWindow.setWindowFlags(QtCore.Qt.Tool)
testWindow2 = MainWindow() # second window which is active
testWindow2.show()
testWindow.show()
testWindow.textEdit.grabKeyboard()
app.exec_()
मूल रूप से, जबकि खिड़की testWindow2
सक्रिय एक है, सभी पाठ testWindow.textEdit
में दिखाई देता है में प्रवेश किया। यह अच्छा
अपनी खुद की खिड़की लेआउट बाहर चल द्वारा अपनी खुद की खिड़की
आप सबसे अधिक लचीलापन हासिल (और अपने आप के लिए सबसे अधिक काम बनाने) बनाना नहीं है, मुझे पता है ...। विचार निम्नलिखित FAQ में वर्णित है।
अन्य "समाधान"
आप सीधे (पहली जगह में क्यूटी प्रयोग करने के लिए बहुत कारण के खिलाफ स्पष्ट रूप से) वांछित परिणाम प्राप्त करने के लिए संबंधित विंडो प्रबंधक के एपीआई समारोह कह सकते हैं। आप क्यूटी स्रोत कोड भी हैक कर सकते हैं।उदाहरण के लिए, यदि आप Qt::Tool
ध्वज सेट करते हैं, तो WS_EX_TOOLWINDOW
के साथ विंडो दिखाने के लिए, SW_SHOWNOACTIVATE
ध्वज के साथ ShowWindow()
फ़ंक्शन का उपयोग करते हुए Qt ShowWindow()
फ़ंक्शन का उपयोग करता है। आप जो चाहें SW_SHOWNOACTIVATE
को आसानी से बदल सकते हैं। लिनक्स एक जैसा होना चाहिए। स्पष्ट रूप से भी अनुशंसित नहीं है।
पोस्ट करने के लिए जोड़ा गया जानकारी। – Ockonal