Название: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 17:03 Код что не так? Помогите Название: Re: connectSlotsByName не связывает со слотом Отправлено: GreatSnake от Март 27, 2012, 17:15 Может из-за того, что вставляешь "enum" перед QProcess::ExitStatus?
И чем не устроил QObject::connect()? Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 17:31 Может из-за того, что вставляешь "enum" перед QProcess::ExitStatus? И чем не устроил QObject::connect()? проверяю работу, в другом классе буду использовать плотнее Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 17:35 в конструкторе пишу ещё
qRegisterMetaType<enum QProcess::ExitStatus>("enum QProcess::ExitStatus"); qRegisterMetaType<enum QProcess::ProcessError>("enum QProcess::ProcessError"); не работает и всё Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 27, 2012, 17:37 Код: process= new QProcess(); А родителя кто процессу задавать будет? Цитировать Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object Название: Re: connectSlotsByName не связывает со слотом Отправлено: GreatSnake от Март 27, 2012, 17:42 А родителя кто процессу задавать будет? Какой глазастый, однако)Название: Re: connectSlotsByName не связывает со слотом Отправлено: GreatSnake от Март 27, 2012, 17:47 в конструкторе пишу ещё Интересно, из каких соображений такое понадобилось ???qRegisterMetaType<enum QProcess::ExitStatus>("enum QProcess::ExitStatus"); qRegisterMetaType<enum QProcess::ProcessError>("enum QProcess::ProcessError"); не работает и всё Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 17:53 в конструкторе пишу ещё Интересно, из каких соображений такое понадобилось ???qRegisterMetaType<enum QProcess::ExitStatus>("enum QProcess::ExitStatus"); qRegisterMetaType<enum QProcess::ProcessError>("enum QProcess::ProcessError"); не работает и всё Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 17:55 Код: process= new QProcess(); А родителя кто процессу задавать будет? Цитировать Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object Название: Re: connectSlotsByName не связывает со слотом Отправлено: Bepec от Март 27, 2012, 17:56 эээ... А обычный enum разве не тупой int?
Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 17:57 эээ... А обычный enum разве не тупой int? гуглил и решение такой ситуации было только в регистрации типа - для обычного коннеткаНазвание: Re: connectSlotsByName не связывает со слотом Отправлено: sudo от Март 27, 2012, 18:50 в конструкторе пишу ещё qRegisterMetaType<enum QProcess::ExitStatus>("enum QProcess::ExitStatus"); qRegisterMetaType<enum QProcess::ProcessError>("enum QProcess::ProcessError"); Если эти энамы отправляются в кьютешных сигналах, то они уже зарегистрированы. Регистрировать их снова не нужно, проблема в другом Код
Здесь enum не нужен Процесс запускал? В приведённом коде нету Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 27, 2012, 18:59 ворнинг в консоли пропал, но связи всё равно нет Какой еще ворнинг? Почему в исходном сообщение не написано про ворнинг? Что за угадайка? Здесь enum не нужен Было в первом ответе. Интересно, сколько раз придется это повторить, чтобы ТС увидел:) Название: Re: connectSlotsByName не связывает со слотом Отправлено: sudo от Март 27, 2012, 19:04 Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 19:55 не работает и всё
ворнинг простой - нет сигнала для слота Название: Re: connectSlotsByName не связывает со слотом Отправлено: Bepec от Март 27, 2012, 19:59 Нет сигнала - значит:
1) ты ошибся в написании (проверь 2 раза, потом ещё раз) 2) твой тип вообще не понимает Qt. Убери его наф*г и вставь int. 3) у тебя где то ошибка в слоте ;) И да, УБЕРИ НАФИГ СВОЙ енум ;) PS а ещё лучше минимально компилируемый пример выложи :D Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 19:59 Нет сигнала - значит: убирал не пашет1) ты ошибся в написании (проверь 2 раза, потом ещё раз) 2) твой тип вообще не понимает Qt. Убери его наф*г и вставь int. 3) у тебя где то ошибка в слоте ;) И да, УБЕРИ НАФИГ СВОЙ енум ;) PS а ещё лучше минимально компилируемый пример выложи :D Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 27, 2012, 20:03 убирал не пашет не пашет - исправляй. Хочешь более развернутый ответ - давай больше информации. Процесс запускаешь? Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 20:04 Код рабочий код с обычными коннектами Название: Re: connectSlotsByName не связывает со слотом Отправлено: Bepec от Март 27, 2012, 20:23 Вот почему нормальный вроде человек, вроде имеющий опыт разработки, выкладывает НЕРАБОТАЮЩИЙ проект без инклудов и нуждающийся в допиливании???
Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 20:26 Вот почему нормальный вроде человек, вроде имеющий опыт разработки, выкладывает НЕРАБОТАЮЩИЙ млять проект без инклудов и нуждающийся в допиливании??? #include <QtGui> всё родное)))) Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 27, 2012, 20:35 Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 20:37 да класс запускает процессы (программы) с параметрами задача убрать коннекты для QProcess *m_process Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 27, 2012, 20:43 Ну для этого m_process должен иметь this родителем. Но это вряд ли получится, так как эти объекты живут в разных потоках
Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 27, 2012, 20:46 самое смешное - создаю m_process в конструкторе класса и убираю создание в функции run() - ничего не работает
как? пишет мол не могу создать ребёнок так как в разных потоках, но я ведь процесс делаю не ребёнком класса, просто создаю Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 27, 2012, 20:50 самое смешное - создаю m_process в конструкторе класса и убираю создание в функции run() - ничего не работает как? пишет мол не могу создать ребёнок так как в разных потоках, но я ведь процесс делаю не ребёнком класса, просто создаю m_process->start(m_appStr, m_listParam); создает дочерний по отношению к m_process объект. m_process и его ребенок получаются в разных потоках А зачем вообще весь этот код? QProcess и без того асинхронно работает Название: Re: connectSlotsByName не связывает со слотом Отправлено: Bepec от Март 27, 2012, 20:56 Кстати интересный сигнал. Который действительно возвращает enum. Походу ещё одна недоработка троллей ;)
Название: Re: connectSlotsByName не связывает со слотом Отправлено: sudo от Март 28, 2012, 10:59 Кстати интересный сигнал. Который действительно возвращает enum. Походу ещё одна недоработка троллей ;) Их over9000, которые энамы возвращают Написал сейчас сэмпл, реально не коннектится, даже если objectName задать Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 28, 2012, 11:02 daimon Зачем ты везде суешь слово enum?
Название: Re: connectSlotsByName не связывает со слотом Отправлено: GreatSnake от Март 28, 2012, 11:10 Написал сейчас сэмпл, реально не коннектится, даже если objectName задать Показывай код - тоже будем пробовать.Название: Re: connectSlotsByName не связывает со слотом Отправлено: sudo от Март 28, 2012, 11:11 main.cpp Код
Object.h Код
Object.cpp Код
Название: Re: connectSlotsByName не связывает со слотом Отправлено: GreatSnake от Март 28, 2012, 11:50 Вполне рабочий сэмпл. В чём проблема?
Название: Re: connectSlotsByName не связывает со слотом Отправлено: sudo от Март 28, 2012, 11:51 Вполне рабочий сэмпл. В чём проблема? Ага, забыл сказать, что этот рабочий ;D Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 28, 2012, 11:54 Вполне рабочий сэмпл. В чём проблема? Ага, забыл сказать, что этот рабочий ;D У мно тож все работает. У ТС две проблемы в коде - parent и слово enum )) Название: Re: connectSlotsByName не связывает со слотом Отправлено: GreatSnake от Март 28, 2012, 12:05 Код
А где инициализация базового класса QThread ??? Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 28, 2012, 12:08 А ты тоже глазастый:)
Название: Re: connectSlotsByName не связывает со слотом Отправлено: GreatSnake от Март 28, 2012, 12:09 У мно тож все работает. У ТС две проблемы в коде - parent и слово enum )) Кстати, с enum тоже всё работает.Название: Re: connectSlotsByName не связывает со слотом Отправлено: sudo от Март 28, 2012, 12:22 У мно тож все работает. У ТС две проблемы в коде - parent и слово enum )) Кстати, с enum тоже всё работает.При прямом коннекте его нормализатор должен порезать, а через connectSlotsByName нужно смотреть, что возвращает QMetaMethod. Раз работает, значит порезанные параметры возвращает Название: Re: connectSlotsByName не связывает со слотом Отправлено: sudo от Март 28, 2012, 12:24 Мдя... А где инициализация базового класса QThread ??? По идее, сролять не должно, просто parent как 0 пронизиализируется. А нам важно, чтобы parent был только у QProcessа Название: Re: connectSlotsByName не связывает со слотом Отправлено: GreatSnake от Март 28, 2012, 12:33 По идее, сролять не должно, просто parent как 0 пронизиализируется. А нам важно, чтобы parent был только у QProcessа Согласен. Исходя из всего вышесказанного TC нас просто парит...Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 28, 2012, 14:01 daimon Зачем ты везде суешь слово enum? консоль буркнула как-то при коннекте не знает такой тип, вот и пришлось так писать и ещё его регестрировать - заметил в другом классе Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 28, 2012, 14:09 Вот бы еще ты выводы консоли сюда писал...
Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 28, 2012, 17:31 Вы говорите зачем я создал этот класс, мол процесс и так создаёт отдельный поток - всё просто, в моём классе есть сигнал, который возвращает указатель на этот поток и в другом классе, где я динамически создаю объекты вот этого класса, я вяжу с коннектом и удаляю также динамически (по пришедшему указателю) - плюс: сигнал приходит только, когда поток-процесс закончил работу и в другом классе могу параллельно динамически создавать кучу таких потоков и они сами удаляться по окончанию работы
хорошо есть ещё один вариант не использовать мой класс, а использовать просто QProcess, но тогда нужно вязать сигнал финиша именно класса QProcess со своим слотом, где нужно разыменовывать sender() на QProcess и там удалять (не очень нравиться такой вариант) Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 28, 2012, 17:33 хорошо есть ещё один вариант не использовать мой класс, а использовать просто QProcess, но тогда нужно вязать сигнал финиша именно класса QProcess со своим слотом, где нужно разыменовывать sender() на QProcess и там удалять (не очень нравиться такой вариант) connect(process, SIGNAL(finished(...)), process, SLOT(deleteLater())); не подойдет такое? Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 28, 2012, 17:37 хорошо есть ещё один вариант не использовать мой класс, а использовать просто QProcess, но тогда нужно вязать сигнал финиша именно класса QProcess со своим слотом, где нужно разыменовывать sender() на QProcess и там удалять (не очень нравиться такой вариант) connect(process, SIGNAL(finished(...)), process, SLOT(deleteLater())); не подойдет такое? Название: Re: connectSlotsByName не связывает со слотом Отправлено: mutineer от Март 28, 2012, 17:38 хорошо есть ещё один вариант не использовать мой класс, а использовать просто QProcess, но тогда нужно вязать сигнал финиша именно класса QProcess со своим слотом, где нужно разыменовывать sender() на QProcess и там удалять (не очень нравиться такой вариант) connect(process, SIGNAL(finished(...)), process, SLOT(deleteLater())); не подойдет такое? Что разыменовывать? deleteLater() это стандартный слот у любого QObject, который его удаляет Название: Re: connectSlotsByName не связывает со слотом Отправлено: daimon от Март 28, 2012, 17:56 хорошо есть ещё один вариант не использовать мой класс, а использовать просто QProcess, но тогда нужно вязать сигнал финиша именно класса QProcess со своим слотом, где нужно разыменовывать sender() на QProcess и там удалять (не очень нравиться такой вариант) connect(process, SIGNAL(finished(...)), process, SLOT(deleteLater())); не подойдет такое? Что разыменовывать? deleteLater() это стандартный слот у любого QObject, который его удаляет |