2008-09-17 15 views
52

मैं अपने आवेदन में से एक में क्यूटी संवाद का उपयोग कर रहा हूं। मुझे सहायता बटन को छिपाने/हटाने की आवश्यकता है। लेकिन मैं यह पता लगाने में सक्षम नहीं हूं कि मैं वास्तव में अपने सहायता बटन पर हैंडल कहां प्राप्त करता हूं। सुनिश्चित नहीं है कि यह क्यूटी विंडो पर एक विशेष ध्वज है।मैं "?" को कैसे छुपा/हटा सकता हूं एक क्यूटी संवाद के "शीर्षक पट्टी" पर मदद बटन?

उत्तर

45

डिफ़ॉल्ट रूप से Qt :: WindowContextHelpButtonHint ध्वज संवाद में जोड़ा जाता है। आप संवाद नियंत्रक को विंडोफ्लैग पैरामीटर के साथ इसे नियंत्रित कर सकते हैं।

उदाहरण के लिए आप ऐसा करके केवल TitleHint और SystemMenu झंडे निर्दिष्ट कर सकते हैं:

QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint); 
d->exec(); 

आप क्यूटी :: WindowContextHelpButtonHint झंडा आप मदद बटन वापस मिल जाएगा जोड़ें।

PyQt में आप कर सकते हैं: खिड़की झंडे पर

from PyQt4 import QtGui, QtCore 
app = QtGui.QApplication([]) 
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint) 
d.exec_() 

अधिक जानकारी क्यूटी दस्तावेज में WindowType enum पर पाया जा सकता।

+2

नीचे र्रविक का जवाब देखें। यदि आप अपने झंडे में Qt :: WindowCloseButtonHint नहीं जोड़ते हैं, तो आप बंद बटन को अक्षम कर देंगे, जो डिफ़ॉल्ट रूप से सक्षम है। – Dan

+1

यहां एक लिंक है जो पीईक्यूटी 4 में विंडो फ्लैग निर्दिष्ट करता है, http://pyqt.sourceforge.net/Docs/PyQt4/qt.html#WindowType-enum – Barmaley

+1

अगर आप बंद बटन चाहते हैं तो ध्वज 'Qt :: WindowCloseButtonHint' भी जोड़ें सक्रिय हो –

26

ठीक है, मुझे ऐसा करने का एक तरीका मिला।

यह विंडो झंडे से निपटता है। तो यहां मैंने जो कोड इस्तेमाल किया है:

Qt::WindowFlags flags = windowFlags() 

Qt::WindowFlags helpFlag = 
Qt::WindowContextHelpButtonHint; 

flags = flags & (~helpFlag); 
setWindowFlags(flags); 

लेकिन ऐसा करने से कभी-कभी संवाद का आइकन रीसेट हो जाता है। तो यह सुनिश्चित करने के लिए कि संवाद का आइकन नहीं बदलता है, आप दो पंक्तियां जोड़ सकते हैं।

QIcon icon = windowIcon(); 

Qt::WindowFlags flags = windowFlags(); 

Qt::WindowFlags helpFlag = 
Qt::WindowContextHelpButtonHint; 

flags = flags & (~helpFlag); 

setWindowFlags(flags); 

setWindowIcon(icon); 
+24

छोटा संस्करण: 'सेटविंडोफ्लैग्स (विंडोफ्लैग्स() और ~ क्यूटी :: विंडोकॉन्टेक्स्ट हेल्प बटनटन); ' –

+1

@ थोरबोजर्न लिंडेज़र: आपको इसे एक उत्तर के रूप में जोड़ना चाहिए। – Hossein

3

जवाब यहाँ सूचीबद्ध काम करेंगे, लेकिन यह अपने आप को जवाब देने के लिए, मैं तुम्हें उदाहरण कार्यक्रम $QTDIR/examples/widgets/windowflags चलाने की सलाह देते हैं। इससे आपको विंडो झंडे और उनके प्रभावों की सभी कॉन्फ़िगरेशन का परीक्षण करने की अनुमति मिल जाएगी। गिलहरी खिड़की की समस्याओं को समझने के लिए बहुत उपयोगी है।

0

मुझे स्लॉट नहीं मिला लेकिन आप वर्चुअल winEvent फ़ंक्शन को ओवरराइड कर सकते हैं।

#if defined(Q_WS_WIN) 
bool MyWizard::winEvent(MSG * msg, long * result) 
{ 
    switch (msg->message) 
    { 
    case WM_NCLBUTTONDOWN: 
     if (msg->wParam == HTHELP) 
     { 

     } 
     break; 
    default: 
     break; 
    } 
    return QWizard::winEvent(msg, result); 
} 
#endif 
8

मैं विंडोज 7, क्यूटी 5.2 में इस मुद्दे में भाग गया, और झंडे संयोजन है कि मेरे लिए सबसे अच्छा काम किया यह था:

क्यूटी :: WindowTitleHint | क्यूटी :: WindowCloseButtonHint

यह मुझे एक काम करने वाला बंद बटन देता है लेकिन कोई प्रश्न चिह्न सहायता बटन नहीं देता है। केवल Qt :: WindowTitleHint या Qt :: WindowSystemMenuHint का उपयोग करके मदद बटन से छुटकारा पा लिया, लेकिन यह बंद बटन को भी अक्षम कर दिया।

जैसा कि माइकल बिशप ने सुझाव दिया था, यह विंडोफ्लैग उदाहरण के साथ खेल रहा था जिसने मुझे इस संयोजन के लिए प्रेरित किया। धन्यवाद!

+0

यह सही जवाब है। उपर्युक्त उत्तर बंद बटन को अक्षम करते हैं, जो डिफ़ॉल्ट रूप से अक्षम नहीं है। – Dan

20
// remove question mark from the title bar 
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); 
0

आवेदन में सभी संवाद के लिए डिफ़ॉल्ट रूप से सवाल के निशान को दूर करने के लिए निम्न तरह से इस्तेमाल किया जा सकता:

bool eventFilter (QObject *watched, QEvent *event) override 
    { 
    if (event->type() == QEvent::Create) 
     { 
     if (watched->isWidgetType()) 
      { 
      auto w = static_cast<QWidget *> (watched); 
      w->setWindowFlags (w->windowFlags() & (~Qt::WindowContextHelpButtonHint)); 
      } 
     } 
    return QObject::eventFilter (watched, event); 
    } 
:

अपने कार्यक्रम के शुरू में कहीं QApplication को निम्न इवेंट फिल्टर संलग्न

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