Russian Qt Forum

Qt => Общие вопросы => Тема начата: simark1979 от Декабрь 26, 2009, 00:11



Название: Сигнал-Слот
Отправлено: simark1979 от Декабрь 26, 2009, 00:11
Есть вот такой класс, следит за изменениями в каталоге
Вроде имеется в нем слот directoryChanged
но connect его не видит, хотя вызвать его через emit удается.


Результат работы:
Object::connect: No such slot QObject::slot_directoryChanged(const QString &) in gsm_handler.cpp:9
Directory changed:  "hand emitted"


Что не так?


#include "gsm_handler.h"
#include <QDebug>

gsm_handler::gsm_handler()
{
    qDebug() << "Constructor gsm_handler";
    QFileSystemWatcher *FileSystemWatcher = new QFileSystemWatcher();

    connect(FileSystemWatcher, SIGNAL(directoryChanged(const QString &)), this, SLOT(slot_directoryChanged(const QString &)));
    FileSystemWatcher->addPath("/sms");

    emit slot_directoryChanged("hand emitted");
}

void gsm_handler::slot_directoryChanged(const QString & path){
    qDebug() << "Directory changed: " << path;
}


Название: Re: Сигнал-Слот
Отправлено: BRE от Декабрь 26, 2009, 00:21
Покажи, что в gsm_handler.h.


Название: Re: Сигнал-Слот
Отправлено: Dendy от Декабрь 26, 2009, 00:28
Я даже знаю что - нет макроса Q_OBJECT. Поэтому SLOT() берётся из родительского класса - из QObject. А там, понятно, такого слота нет.


Название: Re: Сигнал-Слот
Отправлено: lit-uriy от Декабрь 26, 2009, 01:25
И вот это тоже косячёк:
>>emit slot_directoryChanged("hand emitted");
слоты не посылаются, их просто вызывают как обычные функции.


Название: Re: Сигнал-Слот
Отправлено: Alex Custov от Декабрь 26, 2009, 17:55
Я даже знаю что - нет макроса Q_OBJECT. Поэтому SLOT() берётся из родительского класса - из QObject. А там, понятно, такого слота нет.

И второй вариант - Q_OBJECT всё-таки добавили, но qmake заново не вызвали.


Название: Re: Сигнал-Слот
Отправлено: pastor от Декабрь 26, 2009, 18:54
И второй вариант - Q_OBJECT всё-таки добавили, но qmake заново не вызвали.

Тогда бы приложение не слинковалось


Название: Re: Сигнал-Слот
Отправлено: simark1979 от Декабрь 27, 2009, 19:37
А вот
gsm_handler.h.


#include <QObject>
#include <QFileSystemWatcher>

class gsm_handler : public QObject
{
public:
    gsm_handler();
    ~gsm_handler();
protected slots:
    void slot_directoryChanged(const QString & path);
};


Название: Re: Сигнал-Слот
Отправлено: BRE от Декабрь 27, 2009, 19:53
Забыл Q_OBJECT:
Код
C++ (Qt)
class gsm_handler : public QObject
{
   Q_OBJECT
public:
   gsm_handler();
 

и не забудь сделать qmake.


Название: Re: Сигнал-Слот
Отправлено: simark1979 от Декабрь 27, 2009, 21:08
Спасибо. Мужики. Я только начинаю.
Извиняете за тупые вопросы.  :)
Я не забыл, я не знал  >:(