Qt: Выйти из приложения -> контрольный список для правильной очистки

0

У меня всегда проблемы с закрытием моих Qt-приложений. О чем следует заботиться при выходе из Qt :: Application? Я хочу скомпилировать контрольный список, который я могу выполнить, чтобы закончить все части, в зависимости от того, какие функции использует программа. Например, если я использую QThreads, что нужно сделать, чтобы убедиться, что они закрыты должным образом, и так далее со всеми другими частями, которые могут нуждаться в особой осторожности.

Надеюсь, что я не единственный, у кого такие проблемы, и это оказывается полезным для многих.

Теги:
qt

2 ответа

0

В случае QThread, используя механизм сигналов и слотов, вы можете автоматически удалить QThread при завершении:

// Note - using Qt 5 connect style
QThread* pThread = new QThread;
connect(pThread, &QThread::finished, pThread, &QThread::deleteLater);

Теперь все, что должно произойти, - это поток для завершения обработки или владелец потока для вызова pThread-> quit().

Там большая статья здесь о том, как использовать правильно объекты QThread.

Что касается всех других классов Qt, если экземпляр объекта/виджета имеет родительский элемент, то Qt будет обрабатывать удаление всех дочерних объектов. Часто виджет верхнего уровня - это окно, которое будет удалено при закрытии.

0

Нет контрольного списка за пределами C++ дизайна. QThread, к сожалению, не предлагает никаких разумных по умолчанию действий по уничтожению. В C++ земле, что номинально нет-нет. Вам нужен QObject который владеет вашими потоками и перед тем, как исчезнуть сам, позаботится о том, чтобы либо выйти, либо прекратить их, после чего их ждет, прежде чем они будут уничтожены. То же самое касается всех классов, которые вы написали сами: они должны действовать должным образом при разрушении. Qt обычно действует надлежащим образом, когда экземпляры его различных классов удалены, QThread - действительно выдающийся.

После того, как вы будете следовать базовому принципу дизайна C++, а именно, что объекты уничтожают ресурсы при уничтожении, у вас не будет никаких проблем. Используйте интеллектуальные указатели, включая C++ 11, если они доступны. QPointer, QSharedPointer, QScopedPointer - все ваши друзья.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню