Здравствуйте!
Есть в Qt такой замечательный пример
qtdemo/examples/desktop/systray, который показывает как работать с иконкой в систрее. На его основе я добавил код в свою прогу, и столкнулся с такой ситуацией.
В функции main() у меня есть такой код
Q_INIT_RESOURCE(mytetra);
/*
if(!QSystemTrayIcon::isSystemTrayAvailable()) {
QMessageBox::critical(0, QObject::tr("Systray"),
QObject::tr("I couldn't detect any system tray on this system."));
exit(1);
}
*/
Если раскомментировать закомментированный кусок, получим сегфолт. Стек вызовов при сегфолте выглядит так (читать снизу-вверх)
#0 0xb73bd508 in XInternAtom () from /usr/lib/libX11.so.6
#1 0xb7cc7f06 in QSystemTrayIconSys::locateSystemTray () at util/qsystemtrayicon_x11.cpp:71
#2 0xb7cc7fdb in QSystemTrayIconPrivate::isSystemTrayAvailable_sys ()
at util/qsystemtrayicon_x11.cpp:297
#3 0xb7cb2847 in QSystemTrayIcon::isSystemTrayAvailable () at util/qsystemtrayicon.cpp:346
#4 0x08061bd8 in main (argc=1, argv=0xbfddc554) at src/main.cpp:235
Самое интересное, что подобный кусок кода в примере сегфолта не вызывает.
Что делать? Как проверить наличие в системе системного трея, не вызвав при этом ошибку?