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