【发布时间】:2014-04-10 09:55:04
【问题描述】:
我正在 osx、windows、linux 中开发应用程序
我想制作像Skype这样的功能。当用户单击关闭窗口时,应用程序不会退出而是隐藏。当用户单击 Dock 或任务栏上的 appicon 时,我的主窗口将重新打开。
当用户点击应用图标时,我如何获得通知或过滤事件?
【问题讨论】:
我正在 osx、windows、linux 中开发应用程序
我想制作像Skype这样的功能。当用户单击关闭窗口时,应用程序不会退出而是隐藏。当用户单击 Dock 或任务栏上的 appicon 时,我的主窗口将重新打开。
当用户点击应用图标时,我如何获得通知或过滤事件?
【问题讨论】:
首先,您需要防止您的应用程序窗口在您点击“关闭窗口”按钮时关闭。假设您使用QMainWindow:
class MainWindow : public QMainWindow
{
// .. constructors, etc.
// ..
protected:
void closeEvent(QCloseEvent *)
{
// Do not close, but hide the window.
hide();
}
};
Qt 有专门的类来处理任务栏图标 - QSystemTrayIcon。因此,简单的应用程序如下所示:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mw;
QSystemTrayIcon tray; // needs an icon.
// Show the main window when user activates the tray icon.
QObject::connect(&tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
&mw, SLOT(show()));
tray.show();
return app.exec();
}
【讨论】:
closeEvent 的使用是错误的。此方法仅通知您将关闭一个窗口,您不能覆盖该操作。如果要阻止窗口关闭,则必须重新实现event 方法。对于您希望删除的事件,请返回 true 并且不要调用基类的 event 方法。
ignore。但是你没有调用它,你必须调用它!这与重新实现 event 的效果相同。
这应该会有所帮助:
void setQuitOnLastWindowClosed(bool quit)
【讨论】: