2009-06-27 5 views
3

Je suis en train de copier l'exemple systray Qt ici: http://doc.qt.io/archives/4.6/desktop-systray.htmlQt QSystemTrayIcon ne pas envoyer le signal activé

Les choses semblent fonctionner, sauf que l'objet QSystemTrayIcon n'envoie un signal d'activation.

Voici mon code mainwindow.cpp:

#include <QtGui> 

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent), ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    QMessageBox::information(0, tr("Systray"), 
           tr("Loaded.")); 
    createTrayIcon(); 

    connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this, 
      SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); 

    trayIcon->show(); 
} 

void MainWindow::createTrayIcon() 
{ 
    trayIcon = new QSystemTrayIcon(this); 

} 

void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason) 
{ 
    QMessageBox::information(0, tr("Systray"), 
           tr("Testing")); 

} 

void MainWindow::messageClicked() 
{ 
    QMessageBox::information(0, tr("Systray"), 
           tr("Sorry, I already gave what help I could.\n" 
           "Maybe you should try asking a human?")); 
} 

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

J'utilise Qt 4.5.2 sous Windows XP SP2. Cela pourrait-il être un problème avec Windows XP? Ou est-ce que je fais quelque chose de mal? Je n'ai pas de QIcon pour le trayIcon. Est-ce un problème?

Toute aide serait appréciée.

Merci! Jieren

+0

Ce n'est pas clair à partir de votre description, par conséquent je dois demander: Est-ce que l'exemple original de l'icône de la barre d'état système (à partir de Qt) fonctionne? –

+0

Juste testé. Le clic droit fonctionne, mais le double-clic ne fonctionne pas étrangement. Mais pour une raison quelconque, l'objet SystemTray n'envoie même pas le signal activated(). J'ai même mis un QIcon. Toujours rien. Grrrrrrr. – Jieren

Répondre

4

Eh bien, si quelqu'un est intéressé, j'ai trouvé le problème. Le problème était en fait dans le fichier d'en-tête.

est ici celui qui fonctionne:

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QWidget> 
#include <QSystemTrayIcon> 


class MainWindow : public QWidget 
{ 
    Q_OBJECT 

public: 
    MainWindow(); 

private slots: 
    void iconActivated(QSystemTrayIcon::ActivationReason reason); 
private: 
    QAction *minimizeAction; 
    QAction *maximizeAction; 
    QAction *restoreAction; 
    QAction *quitAction; 

    QSystemTrayIcon *trayIcon; 
    void createActions(); 
    void createTrayIcon(); 

    void messageClicked(); 
}; 

#endif // MAINWINDOW_H 

iconActivated doit être déclarée comme une fente privée. Je l'avais déclaré comme une fonction privée.

+0

Bon à voir, vous avez résolu le problème! Je pense que vous devriez probablement fermer la question car elle apparaît toujours dans la liste sans réponse. Troubadour

+0

Désolé, le lien de travail est http: // stackoverflow .com/questions/127588/quoi-est-une-question-fermée-dans-stackoverflow-comment-faire-ils-travail – Troubadour

+2

Ouais désolé mec ... quand j'ai d'abord essayé de le fermer, il m'a dit que je devais attendre un moment. Puis j'ai oublié depuis bien ... Je travaillais sur le programme que c'était pour :-) – Jieren

Questions connexes