मैं "कैसे छिपा / हटा सकता हूं?" Qt डायलॉग के "शीर्षक बार" पर मदद बटन?


81

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

जवाबों:


64

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

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

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

यदि आप Qt :: WindowContextHelpButtonHint ध्वज जोड़ते हैं, तो आपको सहायता बटन वापस मिल जाएगा।

PyQt में आप यह कर सकते हैं:

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

Qt दस्तावेज़ीकरण में WindowType enum पर विंडो फ्लैग के बारे में अधिक विवरण पाया जा सकता है ।


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

1
यहाँ एक लिंक PyQt4, में खिड़की झंडे को निर्दिष्ट है pyqt.sourceforge.net/Docs/PyQt4/qt.html#WindowType-enum
Barmaley

4
Qt::WindowCloseButtonHintयदि आप चाहते हैं कि ध्वज भी सक्रिय हो तो ध्वज जोड़ें ।
डोनाल्ड डक

1
मैं बस सेट करने में सक्षम था QtCore.Qt.WindowCloseButtonHintऔर इसे हटा दिया QtCore.Qt.WindowTitleHint। मुझे लगता है कि झंडे सेट करना डिफ़ॉल्ट झंडे को ओवरराइड करता है, इसलिए आपको उन सभी झंडे को निर्दिष्ट करने की आवश्यकता है जो आप चाहते हैं।
आर्टोमासन

यह भी देखें कि कैसे हटाने के लिए @Parker Coates का जवाब नीचे? ' एक लाइनर के साथ विश्व स्तर पर, क्यूटी 5.10 से
क्लेयर मैक्रे

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

1
यह स्वीकृत उत्तर होना चाहिए, क्योंकि यह पहले से निर्धारित झंडे को संरक्षित करता है।
कैम्पोव्स्की

32

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

यह विंडो झंडे के साथ सौदा करता है। तो यहाँ मैं इस्तेमाल किया कोड है:

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);

30
छोटा संस्करण:setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
Thorbjørn Lindeijer

2
@ ThorbjørnLindeijer: आपको इसे उत्तर के रूप में जोड़ना चाहिए।
होसैन

29

Qt 5.10 तक, आप इन बटन को विश्व स्तर पर एक ही QApplicationविशेषता के साथ अक्षम कर सकते हैं !

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);

1
बहुत मददगार, धन्यवाद। हालाँकि, यदि आप इसे प्रति-संवाद के आधार पर बदलना चाहते हैं (मेरा मामला नहीं है, तो इसलिए मैंने आपके समाधान का उपयोग किया है)।
कैम्पोव्स्की

15

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

Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint

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

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


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

4

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


2

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

QApplicationअपने कार्यक्रम की शुरुआत में कहीं न कहीं निम्नलिखित इवेंट फ़िल्टर संलग्न करें :

  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);
  }

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.