Название: СИГНАЛЫ/СЛОТЫ Отправлено: Deni от Ноябрь 08, 2013, 00:10 Доброго времени суток!
Возникла проблема со слотом в функции void QConditioner::Start: строка Код: connect(timer,SIGNAL(timeout()),this,SLOT(StartTimer(QRoom*))); Код: QObject::connect: Incompatible sender/receiver arguments исходники *.h Код: #ifndef QCONDITIONER_H *.cpp Код: #include "qconditioner.h" Название: Re: СИГНАЛЫ/СЛОТЫ Отправлено: kibsoft от Ноябрь 08, 2013, 00:29 Явно же ошибка написана: QObject::connect: Incompatible sender/receiver arguments
Вот, что нам говорит документация: Цитировать The signals and slots mechanism is type safe: The signature of a signal must match the signature of the receiving slot. (In fact a slot may have a shorter signature than the signal it receives because it can ignore extra arguments.) Since the signatures are compatible, the compiler can help us detect type mismatches. Цитировать connect(timer,SIGNAL(timeout()),this,SLOT(StartTimer(QRoom*))); Непонятно, что вы вообще хотите сделать..а кто в StartTimer будет указатель на объект класс QRoom передавать?Есть три варианта как исправить: 1) убрать параметр QRoom* из функции StartTimer 2) соединять сигнал timeout() с лямбда-функцией, которая будет вызывать StartTimer передавая туда нужный параметр (если Qt5) 3) соединить с другим слотом, который не принимает параметров и уже оттуда вызывать StartTimer передавая туда нужный параметр Название: Re: СИГНАЛЫ/СЛОТЫ Отправлено: Deni от Ноябрь 08, 2013, 00:47 вот как должна вызывается функция в mainwindow.cpp:
Код: cond->Start(room,20); 1)Если я уберу параметр QRoom* из функции StartTimer я не смогу изменять экзэмпляр класса QRoom room, созданный в mainwindow 2)Этот вариант не подходит 3)Тогда мне не понятно, как тогда передать параметр room, принятый в функции void QConditioner::Start Название: Re: СИГНАЛЫ/СЛОТЫ Отправлено: kibsoft от Ноябрь 08, 2013, 00:58 >>Тогда мне не понятно, как тогда передать параметр room, принятый в функции void QConditioner::Start
Как вариант, сделать QRoom *m_room; приватным в QConditioner и потом его использовать. Но если честно, то ваш нужно пересмотреть архитектуру. И еще..нужно убрать connect из функции Start, т.к. при каждом вызове этой функции будет происходить коннект, т.е. 10 раз вызвали Start, 10 раз прошло соединение и соответственно 10 раз вызовется StartTimer после сигнала timeout(). Но лучше, как я и сказал продумать получше это все. |