我在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中遇到了同样的问题,PySide2是一个竞标Qt5的python。这是我发现的。
QSystemTrayIcon
对象(QRect
对象(的几何图形在应用程序中是未知的,直到QSystemTrayIcon
对象的信号activated
至少发出一次。
单击系统托盘中应用程序的实际图标后,会发出activated
信号,然后geometry()
方法可以返回初始化的QRect
对象及其位置和大小的实际值。
简而言之,您必须首先激活系统托盘图标,以便它发送带有实际位置和大小值的初始化QRect
。
要在应用程序启动时获得系统托盘图标的位置,这取决于屏幕分辨率和操作系统,您必须在代码中手动发出activated
信号。
如果目标是在系统托盘图标附近显示一个窗口,您可以在启动时隐藏该窗口,一旦您单击系统托盘图标,它就会显示在系统托盘附近,方法是在代码中将您的窗口定位到与系统托盘图标相同的坐标处;或者,如果要在系统托盘图标附近直接显示窗口,则在启动时手动发出activated
信号。