2015-06-07 53 views
5

我設法讓QSystemTrayIcon可見與此類似:使用下面的代碼行(一起工作的信號插槽)顯示了QWidget或QWindow QSystemTrayIcon附近的QT C++

Assume that the VMWare icon is my QSystemTrayIcon

#include "dialog.h" 
#include "ui_dialog.h" 
#include <QMessageBox> 
#include <form.h> 

Dialog::Dialog(QWidget *parent) 
    : QDialog(parent), ui(new Ui::Dialog) 
{ 
    ui->setupUi(this); 

    QIcon icon("/Users/JohnnyAppleseed/IMAGE.png"); 
    m_ptrTrayIcon = new QSystemTrayIcon(icon); 
    m_ptrTrayIcon->setToolTip(tr("Bubble Message")); 
    // m_ptrTrayIcon->setContextMenu(m_trayIconMenu); 
    connect(m_ptrTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), 
       this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); 
} 

Dialog::~Dialog() 
{ 
    delete ui; 
} 

但是,當我嘗試實現代碼以顯示QWidget/QWindow接近我創建的QSystemTrayIcon時,它無法在其附近顯示。它還顯示了與使用此代碼會迅速消失,以及(即使我不希望它的QSystemTrayIcon附近):

void Dialog::iconActivated(QSystemTrayIcon::ActivationReason reason) 
{ 
    form fr; 
    fr.setWindowFlags(Qt::Popup); 

    fr.show(); 
} 

對於被清晰起見,我想表明我的QWidget/QWindow剛像VMware Fusion的的做法(或者是在Microsoft Windows Vista或後來發現時鐘...

的Mac OS X/Linux的 No description

的Microsoft Windows enter image description here

有人可以指出我做錯了什麼?謝謝!

爲了讓事情變得更簡單,下載項目:http://zipshare.net/sv

更新#1

關於QWidget的/ QWindow輕彈問題,vahancho勸我到form fr;void Dialog::iconActivated(QSystemTrayIcon::ActivationReason reason)功能移動工作窗口的標題。它成功地工作,全部感謝vahancho。該窗口現在顯示,但它不在QSystemTrayIcon附近:(

回答

1

問題是,您在堆棧中創建了表單對象,並且一旦執行結果出現在iconActivated()槽中,它就會被刪除。就是爲什麼它只要你看到它消失了。爲了解決需要在堆上創建彈出的問題。

UPDATE

爲了將你附近,你必須托盤圖標對話框確定托盤圖標的位置,爲此你可以使用QSystemTrayIcon :: geometry()函數,你的代碼看起來像(根據你的需要調整座標):

QRect rect = m_ptrTrayIcon->geometry(); 
fr.move(rect.x(), rect.y()); 
fr.show(); 
+0

感謝您指出QDialog不斷消失的原因!我設法通過從HEADER文件中聲明「fr」來解決它,而不是在iconActivated()中聲明它。但主要問題是,我似乎無法找到任何解決方案保持QDialog接近QSystemTrayIcon ... – user3188609

+0

請看我更新的答案。 – vahancho

+0

工程就像一個魅力!謝謝vahancho:D – user3188609