Russian Qt Forum

Qt => Общие вопросы => Тема начата: Aven от Май 21, 2005, 22:48



Название: Не цепляются слоты
Отправлено: Aven от Май 21, 2005, 22:48
Люди! Странные дела творятся!...

Работаю с Qt2.3.0 в VC6.0. К моему удивлению заметил, что сигналы не коннектятся слотам! Для диалога слоты accept и reject срабатывают (если прямо в коннекте прописать), а те, что пишу я - не хотят!  :evil:

В h-ке объявляю класс, прописываю Q_OBJECT, в конце класса пишу
Код:

public slots:
void enter();

Для описанной в этой же h-ке кнопки buttonOk в конце конструкта пишу коннект
Код:

    connect( buttonOk, SIGNAL( clicked() ), this, SLOT( enter() ) );

Естессно, не забыл описать сам слот
Код:

void myClass::enter(){
  accept();
}

Удивительно, но слот не запускается!  :shock:  Может надо что-то где-то в опциях прописать? Или для винды есть какие-то особенности программирования (в отличие от линукса)?


Название: Не цепляются слоты
Отправлено: Racheengel от Май 23, 2005, 11:24
а moc уважаемый не забыл вызвать для этого h-файла?


Название: Как бы было не смешно...
Отправлено: Metrix от Июль 16, 2007, 14:08
Как бы было не смешно, но сталкнулся с такой же проблемой...
При связывании QAction с методом моего класса. Напряую метод вызывается и корректно работает. Оба и слот и сигнал без аргументов.


Название: Не цепляются слоты
Отправлено: Sergeich от Июль 16, 2007, 15:06
В moc-файле слот enter() присутствует?


Название: Не цепляются слоты
Отправлено: Metrix от Июль 16, 2007, 16:23
Ну допустим что мой метод завется evaluate() (который вызываемый слот) - в moc файле (moc_ScriptObj.cpp) - встречается два раза:
1)
Код:
 static const char qt_meta_stringdata_ScriptObj[] = {
    "ScriptObj\0\0[b]evaluate()[/b]\0"
    };


2)
Код:
int ScriptObj::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QObject::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: [b]evaluate();[/b] break;
        }
        _id -= 1;
    }
    return _id;
}


Оно?


Название: Не цепляются слоты
Отправлено: Lion от Июль 16, 2007, 18:26
Возможно проблема в том, что в конструкторе коннектишь, попробуй коннектить вне коструктора.


Название: Не цепляются слоты
Отправлено: Sergeich от Июль 16, 2007, 19:55
А что connect возвращает?


Название: Все заработало!
Отправлено: Metrix от Июль 17, 2007, 08:49
Как всегда это было скорее из-за кривизны рук! :)
Вообщем я в конструкторе класса пытался сконнектить его метод с методом класса, обьявленного локально. как только я сделал его членом самого класса, то все заработало!


Название: Не цепляются слоты
Отправлено: pastor от Июль 17, 2007, 11:46
Странно, очень странно
А ты не пробывал писать QObject::connect(бла-бла-бла);? Т.е. дописать QObject::


Название: Не цепляются слоты
Отправлено: Metrix от Июль 17, 2007, 11:50
Если честно нет, тк макрос Q_OBJECT и так обьявлен в основном классе (в конструкторе которого и используеться connect)...


Название: Не цепляются слоты
Отправлено: pastor от Июль 17, 2007, 11:54
А приведи код как ты коннектил в конструкторе.
Случайно не так:

Код:

QPushButton btn("Test", this);
connect(&btn, SIGNAL(clicked()), this, SLOT(someSlot()));


Если по такому принципу (не динамически создавал объект, а в стеке), то нет ничего удивительного, почему не работает коннект.


Название: Не цепляются слоты
Отправлено: Metrix от Июль 17, 2007, 12:02
Вообще да! Я же писал выше, что в этом то и трабл и то что я его исправил! :)


Название: Не цепляются слоты
Отправлено: pastor от Июль 17, 2007, 12:10
Просто небыло указано как был создан объект: в стеке или динамически. Если в стеке - то работать не будет.