2010-01-13 9 views
5

में मैक ओएस एक्स टूल विंडो में अधिकतम बटन को कैसे निकालें I मेरे पास एक फ़्लोटिंग टूल विंडो है। यह विंडोज़ पर ठीक काम करता है, लेकिन मुझे मैक ओएस एक्स पर अधिकतम बटन से छुटकारा नहीं मिल सकता है। मैंने Qt::WindowMaximizeButtonHint को अनसेट करने और विंडो को निश्चित आकार में सेट करने का प्रयास किया है। कुछ भी काम नहीं करता है।क्यूटी

MyWidget::MyWidget(QWidget* parent) 
:QWidget(parent, Qt::Tool | Qt::CustomizeWindowHint) 
{ 
    setupUi(this); 

    setFixedSize(sizeHint()); // doesn't remove maximise button 
    setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint); // doesn't remove maximise button 
} 

मैं एक निर्बाध विंडो का उपयोग नहीं करना चाहता। कोई विचार? मैं क्यूटी 4.4 का उपयोग कर रहा हूँ।

उत्तर

4

नोकिया के रिचर्ड Gustavsen से इस कोड को क्यूटी 4.4 में काम करता है:

class MyWidget : public QWidget 
{ 
    public: 

    MyWidget::MyWidget(QWidget* parent) : QWidget(parent, Qt::Tool) 
    { 
    } 

    void setVisible(bool visible) 
    { 
     QWidget::setVisible(visible); 
     ChangeWindowAttributes(qt_mac_window_for(this), kWindowNoAttributes, kWindowFullZoomAttribute); 
    } 
}; 

धन्यवाद रिचर्ड और नोकिया!

+0

मुझे क्यूटी 4.8 64 बिट बिल्ड के साथ ChangeWindowAttributes क्यों नहीं मिल सकता है? – ldlchina

3

आप विंडो ध्वज की स्थापना शामिल करने के लिए कोशिश कर सकते Qt::Dialog (बोल्ड) जोड़ा:

इंगित करता है कि विजेट एक खिड़की है कि संवाद के रूप में सजाया जाना चाहिए (यानी, आम तौर पर कोई अधिकतम या कम से कम में बटन है शीर्षक बार)। QDialog के लिए यह डिफ़ॉल्ट प्रकार है। यदि आप इसे एक मॉडल संवाद के रूप में उपयोग करना चाहते हैं, तो इसे किसी अन्य विंडो से लॉन्च किया जाना चाहिए, या माता-पिता हो और QWidget :: windowModality प्रॉपर्टी के साथ उपयोग किया जाए। यदि आप इसे मोडल करते हैं, तो संवाद किसी भी इनपुट प्राप्त करने से एप्लिकेशन में अन्य शीर्ष-स्तरीय विंडो को रोक देगा। हम एक शीर्ष-स्तरीय विंडो का संदर्भ लेते हैं जिसमें अभिभावक द्वितीयक विंडो के रूप में होता है।

मैं नहीं जानता कि क्या आप Qt::Dialog और Qt::Tool दोनों की स्थापना की कोशिश की है, तो क्या होगा, लेकिन यह जांच कर रही लायक हो सकता है।

+0

दोनों क्यूटी :: संवाद की कोशिश की | क्यूटी :: उपकरण और क्यूटी :: संवाद। अभी भी दोनों मामलों में अधिकतम बटन था! –

9

क्यूटी विंडोफ्लैग उदाहरण एप्लिकेशन लॉन्च करें। Tool रेडियो बटन चुनें और फिर जाँच:

  • विंडो शीर्षक
  • अनुकूलित खिड़की
  • विंडो बंद करें बटन

यह एक ही रास्ता मैं मैक ओएस एक्स पर पाया प्राप्त करने के लिए आप क्या चाहते हैं लेकिन आप कम से कम बटन खो देंगे। कोई अन्य रास्ता नहीं है। वह मैक ओएस एक्स विंडो प्रबंधक सीमा है।

  1. सभी बटन दिखाई और सभी बटन सक्षम: setWindowFlags(Qt::Tool)
  2. सभी बटन दिखाई देते, बंद और बटन को अधिकतम सक्षम है, तो कम से कम बटन अक्षम:

    सारांश, वहाँ शीर्षक पट्टी में बटनों में से केवल पांच सेट हैं setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)

  3. सभी बटन दिखाई, बटन सक्षम, बंद को अधिकतम करने और विकलांग को कम: setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowMaximizeButtonHint | Qt::CustomizeWindowHint)
  4. केवल बंद करें बटन दिखाई देता है और सक्षम setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)
  5. शीर्षक पट्टी में कोई बटन: setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)
+0

कामिल, ग्रेट उत्तर। दुर्भाग्य से ऐसा लगता है कि Qt :: WindowCloseButtonHint Qt 4.4 में उपलब्ध नहीं है! –

+0

इसके लिए खेद है, लेकिन मैं वर्तमान में क्यूटी 4.6 का उपयोग कर रहा हूं, लेकिन मेरा इरादा आपको क्यूटी से विंडोफ्लैग उदाहरण चलाने के लिए था, ताकि आप आसानी से और काफी तेज़ विकल्प –

+0

कर सकें। मैंने क्यूटी 4.4 में विंडोफ्लैग उदाहरण की कोशिश की है, लेकिन नहीं एक संयोजन नहीं मिला जो अधिकतम बटन हटा देता है। –

1

मैं

setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint) 
2

साथ यह करने के लिए कर रहा था यहाँ एक क्रॉस प्लेटफॉर्म तरीका यह करने के लिए है। आपने अपने QMainWindow या QWidget की अपनी सेट दृश्य विधि को ओवरराइड कर दिया है। वैसे ही किसी भी विंडो ध्वज को संशोधित किया जा सकता है जिस पर खिड़की पर दृश्य प्रभाव पड़ता है।

इस तरह से ऐसा करने का कारण यह है कि कक्षा को वास्तव में खिड़की को दिखाने से पहले विंडो चश्मा की आवश्यकता होती है।

void setVisible(bool visible) 
{ 
    setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint); 
    QWidget::setVisible(visible); 
} 
+0

यह एक अच्छा जवाब है कि यह पहले सेट किए गए किसी भी विंडो झंडे को अनसेट नहीं करता है। – Oszkar