Ockonal
Апрель 26, 2009 16:14:17
Здравствуйте, в моей программе реализована функция оповещений (всплывающие окна). У меня есть отдельный класс, который над всем этим работает, у него есть статистическая ф-ция,в которую передают текст и тип оповещения. Например: (“Файл не найден”, “Ошибка”).
В разных частях импортирую этот класс и использую. Но есть проблемка, вызывать из других потоков нельзя.
Одна из идей была создать свой сигнал и привязать его к классу с оповещениями. И просто когда надо emit сигнал с нужными параметрами. Но как-то все криво. Что скажите?
j2a
Апрель 26, 2009 18:10:38
Одна из идей была создать свой сигнал и привязать его к классу с оповещениями. И просто когда надо emit сигнал с нужными параметрами. Но как-то все криво.
Так сигналы нужно не привязывать к классу, а определять слоты и соединять нужные сигналы с нужными слотами. И тогда не будет криво.
Ockonal
Апрель 26, 2009 18:57:13
Значит я могу как-то глобально все это делать? Не привязывать к классам?
Например:
connect(AlertClass, SIGNAL(“signature…”), AlertClass.ShowAlert)
Так я привязываю мой класс, который показывает уведомления к сигналу, обработчик - статистическая ф-ция в классе AlertClass
И в нужном месте эмулирую сигнал: emit(SIGNAL(“signature…”))
Так пройдет?
poltergeist
Апрель 26, 2009 19:29:48
Главная цель - это создать событие (event) в главном потоке программы, в котором работает eventloop Qt-а.
1) создать свой кастомный event и делать postEvent из рабочего потока, сам event и диалог будут отрабатываться в основном потоке;
- или -
2) посылать сигнал (по сути тоже самое что и первое, только более высокоуровневое) из рабочего потока;
В любом случае нужен получатель события, который будет показывать диалог - им может быть любой Qt-шный класс. Как всё это будет реализовано - это уже отдельный вопрос, я бы сделал всё в рамках одного класса и посылал бы события “сам себе” но через eventloop :)
poltergeist
Апрель 26, 2009 19:32:34
Ockonal connect(AlertClassInstance, SIGNAL(“signature…”), AlertClass.ShowAlert)
Ockonal
Апрель 26, 2009 19:37:59
А можете показать какой-то небольшой пример… Я что-то не могу въехать.
dimabest
Апрель 27, 2009 00:05:40
Ockonal
Апрель 27, 2009 21:56:37
Спасибо за пример. Кажется, понял.