Russian Qt Forum
Ноябрь 23, 2024, 23:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: В программе сегфолтится isSystemTrayAvailable(). А в примере все в порядке.  (Прочитано 4175 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Январь 11, 2009, 00:04 »

Здравствуйте!


Есть в 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

Самое интересное, что подобный кусок кода в примере сегфолта не вызывает.

Что делать? Как проверить наличие в системе системного трея, не вызвав при этом ошибку?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Rcus
Гость
« Ответ #1 : Январь 11, 2009, 00:28 »

Ошибка воспроизводится если вызвать QSystemTrayIcon::isSystemTrayAvailable() до создания QApplication, но вы же не делаете подобного... или делаете?
Записан
ритт
Гость
« Ответ #2 : Январь 11, 2009, 00:40 »

делает
Q_INIT_RESOURCE вызывается до создания QApplication...
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #3 : Январь 11, 2009, 00:46 »

Делаю.

Не думал, что проверка наличия систрея связана с наличием объекта приложения.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #4 : Январь 11, 2009, 08:46 »

QApplication всегда должен быть первым, до использования любых классов Q*
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.113 секунд. Запросов: 23.