Название: Странности работы connect Отправлено: Сергей Д. от Март 13, 2023, 22:54 Добрый день, возникло не понимание работы механизма connect, есть connect(loadingWindow,&CreateFilter::_historyRecordLine, this, &Core::WriteHistory) но, основная проблема состоит в том что при достижения сигнала (&CreateFilter::_historyRecordLine) в инициируемом классе loadingWindow не происходит вызов слота (Core::WriteHistory) в основном родительском this классе. Ошибок в отладчике не на наблюдаться.
Цитировать void Core::on_pushButton_2_clicked() { Events* runMethods = new Events(); if (!CreateFilter::pathFile.isEmpty() && !runMethods->IsCheckParentTreeWidget(ui->treeWidget)) { CreateFilter *loadingWindow = new CreateFilter(); //CHECK_TRUE(connect(loadingWindow,&CreateFilter::_historyRecordLine, this, &Core::WriteHistory)); connect(loadingWindow,&CreateFilter::_historyRecordLine, this, &Core::WriteHistory); loadingWindow->show(); //loadingWindow->_historyRecordLine(); QEventLoop waitWidgetClose = QEventLoop(); connect(loadingWindow, SIGNAL(closeSignal()), &waitWidgetClose, SLOT(quit())); //ожидает сигнала о закрытии формы waitWidgetClose.exec(); } } Но если вызвать сигнал loadingWindow->_historyRecordLine(); из родительского класса this то все работает. Название: Re: Странности работы connect Отправлено: kambala от Март 14, 2023, 00:02 _historyRecordLine должен быть объявлен как
Код
отправка сигнала через loadingWindow->_historyRecordLine() тоже выглядит неверно: должно быть Код
а waitWidgetClose точно нужен? Название: Re: Странности работы connect Отправлено: Сергей Д. от Март 14, 2023, 00:43 Не несомненно оно выглядит так
Код: public: signals: это пример вызова из родительского класса (хотя даже и так работает) а из дочернего выглядит так Код: emit this->_historyRecordLine(); Название: Re: Странности работы connect Отправлено: kambala от Март 14, 2023, 10:49 так тебе принципиально блокировать метод через waitWidgetClose? асинхронность никак не подходит? я думаю, что проблема сидит здесь.
Название: Re: Странности работы connect Отправлено: Сергей Д. от Март 14, 2023, 21:23 Я то же так подумал, отключив блокировку проблема все равно осталась, но почему я могу спокойно сигналом вызвать из родительского класса и тем же сигналом не могу вызвать из дочернего
Название: Re: Странности работы connect Отправлено: kambala от Март 14, 2023, 22:44 в приведенном коде из родительского ты вызываешь до запуска waitWidgetClose, а из дочернего это явно происходит уже после запуска
Название: Re: Странности работы connect Отправлено: Сергей Д. от Март 15, 2023, 21:33 Да проблемы удалось определить, в конструкторе даже поле инициализации всего класса данные сигнал не срабатывает, но после выхода их конструктора дочернего класса, при выполнение любого события в нем он уже работает, что то я упустил где подобное было описано :(
Название: Re: Странности работы connect Отправлено: kambala от Март 15, 2023, 22:59 по идее пока не произойдет выход из конструктора, извне объект не считается созданным. хотя может это только как-то связано с мета-объектной системой Qt.
Название: Re: Странности работы connect Отправлено: tux от Март 16, 2023, 00:13 по идее пока не произойдет выход из конструктора, извне объект не считается созданным. хотя может это только как-то связано с мета-объектной системой Qt. Это не с "мета-объектной системой Qt" связано, а со здравым смыслом. При конструирования объекта он ведь может быть и "не достроен". Допустим, памяти не хватило. Понятно, что "извне" объект либо создан полностью, либо не создан вообще. |