QSystemTrayIcon 没有 return 任何几何信息

QSystemTrayIcon does not return any geometry information

我在 Unity 桌面上使用 Ubuntu (17.04)。我无法获得 QSystemTrayIcon 的任何几何信息:

trayIconMenu = new QMenu(this);

trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayIconMenu);

QPixmap trayImage(":/icon.png");
QIcon icon(trayImage);
trayIcon->setIcon(icon);
setWindowIcon(icon);
trayIcon->show();
QRect rect = trayIcon->geometry();
qDebug() << "Tray GEO: " << rect;

这将打印出以下内容:

Tray GEO:  QRect(0,0 0x0)

一切都归零了,这不可能是正确的。

我在 PySide2 中遇到了同样的问题,python 竞标 Qt5。这是我的发现。

QSystemTrayIcon 对象(QRect 对象)的几何形状在您的应用程序中是未知的,直到 QSystemTrayIcon 对象的信号 activated 至少发出一次。

一旦您在系统托盘中单击应用程序的实际图标,就会发出 activated 信号,然后 geometry() 方法可以 return 初始化 QRect对象及其位置和大小的实际值。

简而言之,您必须首先激活系统托盘图标,以便它发送初始化的 QRect 及其实际位置和大小值。

要在应用启动时获取系统托盘图标的位置,这取决于屏幕分辨率和 OS,您必须在代码中手动发出 activated 信号。

如果目标是在系统托盘图标附近显示 window,您可以在启动时隐藏 window,一旦您点击通过在您的代码中将 window 定位到与系统托盘图标相同的坐标,系统托盘图标;或者如果你想直接在系统托盘图标附近显示 window,你可以在启动时手动发出 activated 信号。