2011-05-24 14 views
5

मैंने अपने ऐप के लिए सिस्टम ट्रे आइकन सेट अप किया है और इसमें एक सरल संदर्भ मेनू संलग्न किया है। यदि मैं संदर्भ मेनू लाने के लिए आइकन पर राइट क्लिक करता हूं तो यह ठीक काम करता है। यदि मैं फिर कहीं क्लिक करता हूं जो ऐप का ध्यान खो देता है (उदाहरण के लिए टास्क बार या अन्य ऐप पर कहीं और) संदर्भ मेनू हटाया नहीं जाता है और क्लिक करते समय भी सही कार्रवाई को ट्रिगर करता है। यदि, हालांकि, मैं मुख्य ऐप पर क्लिक करता हूं तो संदर्भ मेनू अपेक्षित के रूप में गायब हो जाता है।क्यूटी सिस्टम ट्रे संदर्भ मेनू तब रहता है जब ऐप फोकस

actionExit = new QAction("Exit", this); 
connect(actionExit, SIGNAL(triggered()), this, SLOT(ExitClient())); 

myTrayIconMenu = new QMenu(this); 
myTrayIconMenu->addAction(actionExit); 

trayIcon = new QSystemTrayIcon(icon, this); 
trayIcon->setContextMenu(myTrayIconMenu); 
connect(systrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), 
     this, SLOT(ToggleVisibility(QSystemTrayIcon::ActivationReason))); 
trayIcon->show(); 

मैं अपने खुद के कोड है कि एप्लिकेशन फोकस खोने ताकि मैं मैन्युअल रूप से संदर्भ मेनू छिपा कर सकते हैं के लिए परीक्षण जोड़ने की आवश्यकता है -

यहाँ ट्रे आइकन और संदर्भ मेनू बनाने के लिए प्रासंगिक कोड है? मैं इस कार्यक्षमता में निर्माण किया जाएगा मान लिया था

[समस्या विंडोज 7 में हो रहा है, दृश्य स्टूडियो 2010 प्रो के माध्यम से क्यूटी प्लग-इन के साथ संकलन - मैं किसी भी अन्य ओएस के तहत परीक्षण नहीं किया]।

मैं एपीआई दस्तावेज में यह देखा -

नोट: सिस्टम ट्रे आइकन मेनू का स्वामित्व नहीं लेता है। आपको यह सुनिश्चित करना होगा कि उचित समय पर हटा दिया गया हो, उदाहरण के लिए, उचित मूल ऑब्जेक्ट के साथ मेनू बनाना।

अगर मैं का उपयोग करते हैं एप्लिकेशन फोकस खो देता है

myTrayIconMenu = new QMenu(); 

बजाय

myTrayIconMenu = new QMenu(this); 

संदर्भ मेनू निकाल दिया जाता है। लेकिन फिर मुझे संदर्भ मेनू को मैन्युअल रूप से हटाने का ख्याल रखना होगा।

अन्य लोगों ने इस स्थिति के साथ कैसे निपटाया है?

+0

नई QMenu() संकेत के लिए धन्यवाद! यह मेरी समस्या हल हो गई है। –

उत्तर

0

क्या आप बता सकते हैं कि आप किस कंपाइलर का उपयोग कर रहे हैं? मुझे लगता है कि मुझे यह समस्या भी होती थी। इसके अलावा कुछ अन्य ट्रे-आइकन संबंधित समस्याएं (मेनू जो केवल छाया दिखाएंगे, मेनू जो टास्कबार के नीचे फंस जाएंगे, आदि)

जब से मैंने मिंगव 32 से विजुअल स्टूडियो 2008 कंपाइलर में स्विच किया है, तो यह परेशान नहीं हो रहा है इसके बाद मैं। शायद कोई और इस पर विस्तार कर सकता है (क्योंकि मैं विंडोज विकास पर कोई विशेषज्ञ नहीं हूं)।

+0

मैं क्यूटी प्लग-इन के साथ विजुअल स्टूडियो 2010 प्रोफेशनल का उपयोग कर रहा हूं – Rok

0

आप मेनू का विलोपन को संभालने के लिए deleteLater() स्लॉट के लिए aboutToHide() संकेत जुड़ सकता

2

में एक QSystemTrayIcon को लागू करने के अनुसार क्यूटी 4.8.0 में हल हो जाएगा अपने कुछ QWidget के बजाय QAplication व्युत्पन्न कक्षा इस समस्या को ठीक कर सकती है।

main.cpp:

int main(int argc, char *argv[]) 
{ 
    return TestApp(argc, argv).exec(); 
} 

testApp.cpp:

TestApp::TestApp(int &argc, char **argv) : 
    QApplication(argc, argv) 
{ 
    quitAction = new QAction("quit", this); 
    connect(quitAction, SIGNAL(triggered()), this, SLOT(quit())); 
    systemTrayMenu = new QMenu("tray menu"); 
    systemTrayMenu->addAction(quitAction); 

    trayIcon = new QSystemTrayIcon(this); 
    trayIcon -> setToolTip("test app"); 
    connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), 
      this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); 
    trayIcon -> setContextMenu(systemTrayMenu); 
    trayIcon -> show(); 
} 

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

  • कोई संबंधित समस्या नहीं^_^