Название: не высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 12:41 не всегда высылается сигнал
есть конструктор некоторого класса: Код: UsersWidget::UsersWidget(QWidget *parent) : QWidget(parent) при нажатии на кнопку bRefreshUser или по истечение таймера (1 ms) высылается сигнал SignalToGetUserList(); а если просто писать emit SignalToGetUserList(); , то сигнал не высылается... помогите разобраться? ______________________________________________________________ Qt 4.5.2, OS: Linux ubuntu, IDE: QDevelop. Название: Re: не всегда высылается сигнал через emit Отправлено: kuzulis от Июль 03, 2009, 12:57 эмм.. из ассистента пробовали код: ???
Код: class MyWidget : public QWidget т.е Вы забыти оператор this вроде Название: Re: не всегда высылается сигнал через emit Отправлено: Авварон от Июль 03, 2009, 12:58 this можно опускать вроде
Название: Re: не всегда высылается сигнал через emit Отправлено: lit-uriy от Июль 03, 2009, 13:04 >>this можно опускать вроде
Все верно, вот из доки: Equivalent to connect(sender, signal, this, method, type). Название: Re: не всегда высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 13:07 this можно опускать, когда объект не обрабатывает сигнал, а передаёт его дальше...
connect(bRefreshUser, SIGNAL(clicked()), SIGNAL(SignalToGetUserList())); - работает как надо, т.е. высылает сигнал Timer::singleShot(1, this, SLOT(slotToSendSignal())); - тоже работает, вызывает слот slotToSendSignal(), который в свою очередь высылает сигнал Код: void UsersWidget::slotToSendSignal() если просто пытаюсь выслать сигнал emit SignalToGetUserList(); при создании объекта допустим так: Код: UsersWidget::UsersWidget(QWidget *parent) : QWidget(parent) или так: Код: UsersWidget::UsersWidget(QWidget *parent) : QWidget(parent) то ничего не происходит... может я что-то не понимаю... или просто туплю.... Название: Re: не всегда высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 13:12 меня интересует, как при создании объекта сразу выслать сигнал,
я конечно извратился и использовал таймер и слот, но хочется как-то проще... Название: Re: не всегда высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 13:15 >>this можно опускать вроде Все верно, вот из доки: Equivalent to connect(sender, signal, this, method, type). вы видимо не поняли, у меня ситуация: connect(p_sender, SIGNAL(...), SIGNAL(...)); к тому же у меня это работает меня интересует, как просто выслать сигнал через emit... Название: Re: не всегда высылается сигнал через emit Отправлено: Авварон от Июль 03, 2009, 13:16 проектик в студию... странно это, эмит сразу после коннекта работать должен. Точно коннект был до вызова?
Название: Re: не всегда высылается сигнал через emit Отправлено: kuzulis от Июль 03, 2009, 13:23 а сам сигнал SignalToGetUserList() определен ?
Название: Re: не всегда высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 13:25 вот проект:
имеется mainwind: .cpp Код: ... usersWidget.h Код: #ifndef __USERSWIDGET_H__ usersWidget.cpp Код: #include "usersWidget.h" workwithdatabase.h Код: class WorkWithDatabase : public QObject workwithdatabase.cpp Код: ... ещё раз повторюсь если в конструкторе UsersWidget::UsersWidget(QWidget *parent) : QWidget(parent) выслать emit SignalToGetUserList(); то ничиго не проиходит а если QTimer::singleShot(1, this, SLOT(slotToSendSignal())); или нажать на кнопку, то сигнал высылается... Название: Re: не всегда высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 13:28 а сам сигнал SignalToGetUserList() определен ? конечно, посмотри пример выше ... Название: Re: не всегда высылается сигнал через emit Отправлено: denka от Июль 03, 2009, 13:30 Все очень просто у тебя сигнал высылаеться до вызова connect
И еще this можно опускать, когда объект не обрабатывает сигнал, а передаёт его дальше... this можно опускать потому что это переопределенный метод, и нет разницы будет он соединен с сигналом или со слотомНазвание: Re: не высылается сигнал через emit Отправлено: lit-uriy от Июль 03, 2009, 13:33 >>у тебя сигнал высылаеться до вызова connect
а где это видно? Название: Re: не высылается сигнал через emit Отправлено: denka от Июль 03, 2009, 13:37 >>у тебя сигнал высылаеться до вызова connect Вот здесь:а где это видно? Код: usersWidget = new UsersWidget(this); Код: QTimer::singleShot(1, this, SLOT(slotToSendSignal())); Название: Re: не всегда высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 13:37 Все очень просто у тебя сигнал высылаеться до вызова connect хм.... а ты ведь прав! сначала создаётся объект и тут же высылается сигнал... а только потом connect Цитировать И еще по поводу этого...я процитировал из книги Макс Шлееthis можно опускать, когда объект не обрабатывает сигнал, а передаёт его дальше... this можно опускать потому что это переопределенный метод, и нет разницы будет он соединен с сигналом или со слотомНазвание: Re: не высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 13:42 выход нашёл таким:
после connect вызвал usersWidget->slotToSendSignal(); насчёт таймера, он вызывался через 1 милисекунду, видимо этого времени хватило, чтобы прошла инициализация в connect Название: Re: не высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 13:43 может будут ещё замечания по этой теме?
через пару часов удалю эту тему... Название: Re: не всегда высылается сигнал через emit Отправлено: denka от Июль 03, 2009, 13:43 Цитировать И еще по поводу этого...я процитировал из книги Макс Шлееthis можно опускать, когда объект не обрабатывает сигнал, а передаёт его дальше... this можно опускать потому что это переопределенный метод, и нет разницы будет он соединен с сигналом или со слотомНазвание: Re: не всегда высылается сигнал через emit Отправлено: Yura от Июль 03, 2009, 13:53 В принципе на счет конекта можешь проверить сам если мне не веришь или глянуть в справку ;) что здесь ты имеешь ввиду? я разобрался, что сигнал был выслан раньше коннекта, ты об этом? ps. само собой без asistant'a "не куда" :)) Название: Re: не высылается сигнал через emit Отправлено: lit-uriy от Июль 03, 2009, 13:58 >>создаеться объект и сразу вызывает в конструторе сигнал а потом уже идет конект.
Вот это непонятно. В конструкторе класса создаётся соединение и, затем(!), посылается сигнал. Подскажи место в документации, где говорится, что создание соединения может быть отложено на потом. Название: Re: не высылается сигнал через emit Отправлено: denka от Июль 03, 2009, 14:07 Я не про соединение в конструкторе. А про это соединение:
Код: connect(usersWidget, SIGNAL(SignalToGetUserList()), workWithDatabase, SLOT(SlotUsersList())); Название: Re: не всегда высылается сигнал через emit Отправлено: denka от Июль 03, 2009, 14:16 В принципе на счет конекта можешь проверить сам если мне не веришь или глянуть в справку ;) что здесь ты имеешь ввиду? я разобрался, что сигнал был выслан раньше коннекта, ты об этом? ps. само собой без asistant'a "не куда" :)) Цитировать this можно опускать, когда объект не обрабатывает сигнал, а передаёт его дальше... |