2009-06-27 1 views
3

Ich versuche, die Qt Systray Beispiel hier zu kopieren: http://doc.qt.io/archives/4.6/desktop-systray.htmlQt QSystemTrayIcon nicht aktivierte Signal sendet

Dinge scheinen außer zu arbeiten, dass die QSystemTrayIcon Objekt wird ein Aktivierungssignal nicht sendet.

Hier ist mein mainwindow.cpp Code:

#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; 
} 

Ich bin mit Qt 4.5.2 auf Windows XP SP2. Könnte das ein Problem mit Windows XP sein? Oder mache ich etwas falsch? Ich habe kein QIcon-Set für das TrayIcon. Ist das ein Problem?

Jede Hilfe wäre willkommen.

Danke! Jieren

+0

Es ist nicht klar aus Ihrer Beschreibung, daher muss ich fragen: Funktioniert das Original (von Qt) System Tray Icon Beispiel? –

+0

Habe es gerade getestet. Rechtsklick funktioniert, aber Doppelklick funktioniert seltsamerweise nicht. Aber aus irgendeinem Grund sendet das SystemTray-Objekt nicht einmal das aktivierte() Signal. Ich habe sogar ein QIcon gesetzt. Immer noch nichts. Grrrrrrr. – Jieren

Antwort

4

Nun, wenn jemand interessiert ist, fand ich das Problem. Das Problem lag tatsächlich in der Header-Datei.

Hier ist die eine, die funktioniert:

#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 muss als private Slot deklariert werden. Ich hatte es als private Funktion deklariert.

+0

Gut zu sehen, dass Sie das Problem gelöst haben! Ich denke, Sie sollten die Frage wahrscheinlich schließen, da sie immer noch in der unbeantworteten Liste erscheint. Troubadour

+0

Sorry, Arbeitslink ist http: // Stackoverflow .com/questions/127588/Was-ist-eine-geschlossen-Frage-in-Stackoverflow-wie-sie-sie-Arbeit – Troubadour

+2

Yeah sorry dude ... als ich zuerst versuchte, es zu schließen, sagte es mir, dass ich musste warten Sie eine Weile. Dann habe ich es gut vergessen ... Ich habe an dem Programm gearbeitet, für das es war :-) – Jieren