Qt QSystemTrayIcon не отправляет активированный сигнал - PullRequest
3 голосов
/ 27 июня 2009

Я пытаюсь скопировать пример системного Qt здесь: http://doc.qt.io/archives/4.6/desktop-systray.html

Кажется, что все работает, за исключением того, что объект QSystemTrayIcon не отправляет сигнал активации.

Вот мой код 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;
}

Я использую Qt 4.5.2 в Windows XP SP2. Может ли это быть проблемой с Windows XP? Или я что-то не так делаю? У меня нет установленного QIcon для trayIcon. Это проблема?

Любая помощь будет оценена.

Спасибо! Jieren

1 Ответ

4 голосов
/ 29 июня 2009

Ну, если кому-то интересно, я нашел проблему. Проблема была на самом деле в заголовочном файле.

Вот тот, который работает:

#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

iconActivation необходимо объявить как частный слот. Я объявил это как частную функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...