我正在尝试复制Qt systray示例: 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;
}
我在Windows XP SP2上使用Qt 4.5.2。这可能是Windows XP的问题吗?或者我做错了什么?我没有为trayIcon设置QIcon。这是一个问题吗?
任何帮助都将不胜感激。
谢谢! 洁人
答案 0 :(得分:4)
如果有人有兴趣,我发现了这个问题。问题实际上是在头文件中。
这是有效的:
#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需要声明为私有插槽。我把它宣布为私人功能。