QSystemTrayIcon不返回任何几何信息

时间:2018-11-09 18:39:22

标签: qt geometry qrect qsystemtrayicon

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

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

1 个答案:

答案 0 :(得分:1)

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

在您的应用程序中,QSystemTrayIcon对象(QRect对象)的几何形状至少要发射一次,才能知道它的几何形状。

单击系统托盘中应用程序的实际图标后,将发出activated信号,然后QSystemTrayIcon方法可以返回初始化的activated对象,其实际值为它的位置和大小。

简而言之,您必须先激活系统任务栏图标,才能发送初始化后的geometry()及其实际位置和大小值。

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

如果目标是在系统任务栏图标附近显示一个窗口,则可以在启动时将其隐藏,一旦单击系统任务栏图标,将其放置在代码中即可将其显示在系统任务栏附近。与系统任务栏图标的坐标相同;或者如果要直接在系统任务栏图标附近显示窗口,则在启动时手动发出QRect信号。