1

我在 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)

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

4

1 回答 1

1

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

在对象的信号至少发出一次之前,您的应用程序中不知道QSystemTrayIcon对象(对象)的几何形状。QRectactivatedQSystemTrayIcon

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

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

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

如果目标是在系统托盘图标附近显示一个窗口,您可以在启动时隐藏该窗口,一旦您单击系统托盘图标,它将显示在系统托盘附近,方法是将您的代码中的窗口定位到相同坐标作为系统托盘图标;或者,activated如果您想直接在系统托盘图标附近显示窗口,您可以在启动时手动发出信号。

于 2019-12-03T21:37:25.943 回答