QT: я должен отключить слот вручную?Если да, как я могу отключить определенный слот? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть слот в классе B, который будет подключаться к сигналу в классе A, но класс B будет деконструирован непостоянно, поэтому во время деконструкции класса B я должен отсоединить слот или он будет отключен QT?Если я должен вручную отключить соединение, как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Qt заботится о разъединении.Вам не нужно беспокоиться об этом.

Но рекомендуется использовать

obj->deleteLater();

, а не

delete obj;

Тот же вопрос существует

0 голосов
/ 21 мая 2018

Если вы не используете поток, вы можете отключить другой слот класса, как показано ниже: Здесь вы будете вызывать внутри конструктора класса A, а не за пределами конструктора

bttnShutdown = new QPushButton(this);
bttnShutdown->setGeometry(290, 2, 25, 26);
myWorker =new B;
connect(bttnShutdown, SIGNAL(clicked()), myWorker, SLOT(dowork()));
0 голосов
/ 21 мая 2018

Вы можете поймать сигнал void QObject :: destroy (QObject * obj = 0) , чтобы выполнить некоторую очистку:

Этот сигнал испускается непосредственно перед объектомobj уничтожено и не может быть заблокировано.

Все дочерние объекты уничтожаются сразу после испускания этого сигнала.

Для ответа:

Должен ли я отсоединить слот или он будет отключен QT?Если я должен вручную отключить соединение, как я могу это сделать?

Соединение с сигнальным разъемом удаляется, когда любой из задействованных объектов разрушается.

...