2011-04-28 10 views
5

मैक ओएस एक्स पर क्यूटी प्रोजेक्ट के साथ या बिना किसी भी सक्रिय एप्लिकेशन से फोकस किए बिना मुझे अधिसूचना विंडो दिखाना होगा।अधिसूचना विंडो। क्यूटी

यहाँ विजेट निर्माता हिस्सा:

setWindowFlags(
    Qt::FramelessWindowHint | 
    Qt::WindowSystemMenuHint | 
    Qt::Tool | 
    Qt::WindowStaysOnTopHint 
); 
setAttribute(Qt::WA_TranslucentBackground); 

Qt::WA_ShowWithoutActivating कुछ भी प्रभावित नहीं करता।

क्या ऐसा करने का कोई तरीका है? मैं मूल कार्बन/कोको समाधान को लागू करने के लिए तैयार हूं, लेकिन क्यूटी को प्राथमिकता दी जाती है। या शायद मै मैक दर्शन में गलत हूं और मुझे उपयोगकर्ता को किसी अन्य तरीके से सूचित करना चाहिए?

अद्यतन Growl इसकी सूचनाओं में संपादक लाइन का समर्थन नहीं करता है, है ना?

+1

हैं [गुर्राना] (http://growl.info) एक विकल्प है, मैं इसे सलाह देते हैं। यह ओएस एक्स – zneak

+0

पर अधिसूचनाओं के लिए वास्तविक तथ्य बन गया है एक संपादक रेखा क्या है? उदाहरण के लिए –

+0

@Bavarious QLineEdit –

उत्तर

6

मैंने किया!

#ifdef Q_OS_MAC 
#include <Carbon/Carbon.h> 
#endif 

NotifyWindow::NotifyWindow() : QWidget(0 /* This zero is the first point */) { 

    setWindowFlags(
    #ifdef Q_OS_MAC 
     Qt::SubWindow | // This type flag is the second point 
    #else 
     Qt::Tool | 
    #endif 
     Qt::FramelessWindowHint | 
     Qt::WindowSystemMenuHint | 
     Qt::WindowStaysOnTopHint 
    ); 
    setAttribute(Qt::WA_TranslucentBackground); 

    // And this conditional block is the third point 
#ifdef Q_OS_MAC 
    winId(); // This call creates the OS window ID itself. 
      // qt_mac_window_for() doesn't 

    int setAttr[] = { 
     kHIWindowBitDoesNotHide, // Shows window even when app is hidden 

     kHIWindowBitDoesNotCycle, // Not sure if required, but not bad 

     kHIWindowBitNoShadow, // Keep this if you have your own design 
           // with cross-platform drawn shadows 
     0 }; 
    int clearAttr[] = { 0 }; 
    HIWindowChangeAttributes(qt_mac_window_for(this), setAttr, clearAttr); 
#endif 
} 

हम Windows में के रूप में लगभग एक ही अच्छा व्यवहार मिलता है:

  • यह शो पर ध्यान केंद्रित चुरा लिया नहीं है। (जैसे इंटरनेट पर खोज की दो हफ्ते)
  • वहाँ नियंत्रण, पहले उपयोगकर्ता क्लिक संभाल जबकि अन्य विंडो सक्रिय करने के लिए एक अतिरिक्त क्लिक की जरूरत है।
  • जब विंडो सक्रिय हो रही है, उसी एप्लिकेशन की अन्य विंडो, सामने तक बुलबुला नहीं करती हैं।
  • और एक छोटी सी समस्या remains, लेकिन कम से कम यह एक सरल समाधान का है। या यहां तक ​​कि छोड़ा जा सकता है।
4

पावेल,

आप गुर्राना के बारे में सुना है? Growl एक बहुत ही प्रभावशाली अधिसूचना ऐप है जिसे आप अपने एप्लिकेशन के साथ बंडल और उपयोग कर सकते हैं। एडियम - ओएस एक्स के लिए एक लोकप्रिय इंस्टेंट मैसेजिंग ऐप - सभी सूचनाओं के लिए इसका उपयोग करता है।

http://growl.info/

0

मैं सिर्फ इस झंडे

Qt::FramelessWindowHint |Qt::WindowSystemMenuHint |Qt::WindowStaysOnTopHint 

और

setFocusPolicy(Qt::NoFocus); 
setAttribute(Qt::WA_ShowWithoutActivating,true); 

कॉल कोको या खिड़की झंडे और मास्क के लिए कार्बन कोड के बिना परीक्षण करें। और सूचित करें विंडोज़ या लिनक्स में काम करें।

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