Russian Qt Forum
Ноябрь 24, 2024, 16:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не цепляются слоты  (Прочитано 9446 раз)
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
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Май 23, 2005, 11:24 »

а moc уважаемый не забыл вызвать для этого h-файла?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Metrix
Гость
« Ответ #2 : Июль 16, 2007, 14:08 »

Как бы было не смешно, но сталкнулся с такой же проблемой...
При связывании QAction с методом моего класса. Напряую метод вызывается и корректно работает. Оба и слот и сигнал без аргументов.
Записан
Sergeich
Гость
« Ответ #3 : Июль 16, 2007, 15:06 »

В moc-файле слот enter() присутствует?
Записан
Metrix
Гость
« Ответ #4 : Июль 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
Гость
« Ответ #5 : Июль 16, 2007, 18:26 »

Возможно проблема в том, что в конструкторе коннектишь, попробуй коннектить вне коструктора.
Записан
Sergeich
Гость
« Ответ #6 : Июль 16, 2007, 19:55 »

А что connect возвращает?
Записан
Metrix
Гость
« Ответ #7 : Июль 17, 2007, 08:49 »

Как всегда это было скорее из-за кривизны рук! Улыбающийся
Вообщем я в конструкторе класса пытался сконнектить его метод с методом класса, обьявленного локально. как только я сделал его членом самого класса, то все заработало!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Июль 17, 2007, 11:46 »

Странно, очень странно
А ты не пробывал писать QObject::connect(бла-бла-бла);? Т.е. дописать QObject::
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Metrix
Гость
« Ответ #9 : Июль 17, 2007, 11:50 »

Если честно нет, тк макрос Q_OBJECT и так обьявлен в основном классе (в конструкторе которого и используеться connect)...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Июль 17, 2007, 11:54 »

А приведи код как ты коннектил в конструкторе.
Случайно не так:

Код:

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


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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Metrix
Гость
« Ответ #11 : Июль 17, 2007, 12:02 »

Вообще да! Я же писал выше, что в этом то и трабл и то что я его исправил! Улыбающийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #12 : Июль 17, 2007, 12:10 »

Просто небыло указано как был создан объект: в стеке или динамически. Если в стеке - то работать не будет.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 22.