Russian Qt Forum

Qt => Общие вопросы => Тема начата: Hrundel от Август 23, 2013, 23:02



Название: [РЕШЕНО] Не могу получить сигнал из плагина
Отправлено: Hrundel от Август 23, 2013, 23:02
Всем привет,

хочу воспользоваться сигналом из плагина. Написал в интерфейс:

Код:
    signals:
        virtual void ready(int digit) = 0;

В плагин:

Код:
signals:
        void ready(int digit);

Компилятор успешно поглотил.

потом добавил строку:

Код:
connect(state,SIGNAL(ready(int)),this,SLOT(changeStateAutomatical(int)));

Вызвалась ошибка. Попробовал конвертнуть обратно приведением qobject_cast<QObject*>(state)
Опять пишет ошибку.

Вопрос: как решить проблему? как получать сигнал из плагина?

Всем спасибо.


Название: Re: Не могу получить сигнал из плагина
Отправлено: gil9red от Август 23, 2013, 23:58
Код:
signals:
        virtual void ready(int digit) = 0;

может просто:
Код:
signals:
        void ready(int digit);
? :)


Название: Re: Не могу получить сигнал из плагина
Отправлено: Hrundel от Август 24, 2013, 02:35
Речь идет об интерфейсе = абстрактный класс! Там все функции должны быть только виртуальными.
Вопрос лишь в том - правомочно ли использование сигналов в плагинах и в абстрактных классах?
Если да - то как написать правильно линкование со слотом?


Название: Re: Не могу получить сигнал из плагина
Отправлено: gil9red от Август 24, 2013, 09:51
http://studff.ru/blog/programming/138.html  ;)

Цитировать
Вызвалась ошибка. Попробовал конвертнуть обратно приведением qobject_cast<QObject*>(state)
Опять пишет ошибку.
И кст, что за ошибка такая?


Название: Re: Не могу получить сигнал из плагина
Отправлено: Hrundel от Август 24, 2013, 10:28
Во-первых, конечно,  большое спасибо за помощь. Уже сам перед сном пришел к решению. Но сравнить с другим проектом тоже полезно.

Отличие в моем проекте было только в том, что я делал как рекомендует Шлее, а именно - наследовался от  QObject не в самом интерфейсе, а в плагине.
И это не есть хорошо. Так как получается, что плагин вроде как знает о существовании сигналов, а инетерфейс - нет.
Проблема решилась в один сек тупым переносом наследования из плагина в интерфейс. И сигнал заработал!

gil9red, еще раз спасибо.