crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> не вызывается слот при сигнале с деструктора
MishaUA
  опции профиля:
сообщение 25.11.2013, 17:02
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 185
Регистрация: 28.4.2013
Пользователь №: 3810

Спасибо сказали: 13 раз(а)




Репутация:   0  


Допустим, есть такой код:
class ttt public QWidget {
    Q_OBJECT
public:
    ~ttt() {emit destSig("iiii");}
signals:
    destSig(QString);
};

class mw public QMainWindow {
    Q_OBJECT
public:
    mw() {
        ttt*    t = new ttt();
        connect(t, SIGNAL(destSig(QString)), this, SLOT(dest(QString)));
    }
    
public slots:
    dest(QString) {
        // не вызывается при разрушении класса t
    };
}

Проблема в том, что когда генерирую сигнал destSig по событию таймера или кнопки, то слот dest вызывается, но код должен быть устроен, так, чтобы при разрушении mw разрушался t и при этом вызывался слот dest, чего не происходит.
У меня есть предположения, что не вызывается из-за того, что mw уже разрушен, но наверно, ошибаюсь, потому что раньше так делал и оно работало.
Что можно сделать в данной ситуации?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Majestio
  опции профиля:
сообщение 25.11.2013, 17:53
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 13.2.2013
Пользователь №: 3710

Спасибо сказали: 1 раз(а)




Репутация:   1  


Цитата(MishaUA @ 25.11.2013, 17:02) *
Допустим, есть такой код:
class ttt public QWidget {
    Q_OBJECT
public:
    ~ttt() {emit destSig("iiii");}
signals:
    destSig(QString);
};

class mw public QMainWindow {
    Q_OBJECT
public:
    mw() {
        ttt*    t = new ttt();
        connect(t, SIGNAL(destSig(QString)), this, SLOT(dest(QString)));
    }
    
public slots:
    dest(QString) {
        // не вызывается при разрушении класса t
    };
}

Проблема в том, что когда генерирую сигнал destSig по событию таймера или кнопки, то слот dest вызывается, но код должен быть устроен, так, чтобы при разрушении mw разрушался t и при этом вызывался слот dest, чего не происходит.
У меня есть предположения, что не вызывается из-за того, что mw уже разрушен, но наверно, ошибаюсь, потому что раньше так делал и оно работало.
Что можно сделать в данной ситуации?


А если попробовать вот так?

ttt*    t = new ttt(this);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.2.2025, 14:41