QSystemTrayIcon не возвращает никакой геометрической информации
Я использую Ubuntu (17.04) с рабочим столом Unity. Я не могу получить информацию о геометрии для 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 ответов
У меня была такая же проблема в PySide2, торгах Python для Qt5. Вот что я обнаружил.
Геометрия QSystemTrayIcon
объект (a QRect
объект) неизвестен в вашем приложении до тех пор, пока сигнал activated
из QSystemTrayIcon
объект испускается хотя бы один раз.
После того, как вы нажмете фактический значок вашего приложения на панели задач, activated
излучается сигнал, а затем geometry()
метод может вернуть инициализированный QRect
объект с актуальными значениями его положения и размера.
Короче говоря, вы должны сначала активировать значок на панели задач, чтобы он отправил инициализированный QRect
с его фактическими значениями положения и размера.
Чтобы узнать положение значка на панели задач при запуске приложения, зависящего от разрешения экрана и ОС, вы должны вручную запустить activated
сигнал в вашем коде.
Если цель состоит в том, чтобы показать окно рядом со значком на панели задач, вы можете скрыть окно при запуске, и оно будет отображаться рядом с панелью задач после того, как вы нажмете значок на панели задач, разместив в коде ваше окно в том же месте. координаты как значок в системном трее; или вы испускаетеactivated
signal вручную при запуске, если вы хотите, чтобы окно отображалось непосредственно рядом со значком на панели задач.