Почему мой слот не вызывается? - PullRequest
0 голосов
/ 10 июня 2010

У меня есть этот класс:


class CustomEdit : public QTextEdit
{
    Q_GADGET

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};


CustomEdit::CustomEdit(QWidget* parent)
    : QTextEdit(parent)
{
    connect( this, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
}


void CustomEdit::onTextChanged ()
{
    // ... do stuff
}


Метод onTextChanged никогда не вызывается при вводе текста в элемент управления для редактирования.
Чего мне не хватает?

Ответы [ 3 ]

1 голос
/ 11 августа 2011

Пара других возможностей:

1) Объект, от которого вы излучаете сигнал, заблокирован (см. QObject :: blockSignals ())

2) Получатель не имеет привязки к потоку,Если объект потока, в котором был создан получатель, исчезает, а получатель не перемещается в другой поток, он не будет обрабатывать события (слоты являются особым случаем).

1 голос
/ 03 марта 2014

Еще одна возможность, которую я только что потратил около дня, чтобы решить в своем собственном коде:

  • Сигнал определен в суперклассе И его подклассе.Вызов connect () работал с указателем подкласса, но сигнал был передан из кода суперкласса.Решением было удалить объявление сигнала из подкласса, который в любом случае был там по ошибке.
1 голос
/ 10 июня 2010

Все классы, которые содержат сигналы или слоты, должны упоминать Q_OBJECT в начале своего объявления. Они также должны происходить (прямо или косвенно) из QObject.

Попробуйте использовать Q_OBJECT

...