Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
(статическая линковка с не LGPL кодом запрещена), поэтому я сейчас пользуясь этой лицензией требую выслать мне исходные тексты программы
Тайна упаковки PHP кода — несостоятельна
$w = new QWidget();
$layout = new QGridLayout;
$w->setLayout($layout); // владение пререходит к $w
$button1 = new QPushButton($w);
$layout->addWidget($button1);
// пока всё хорошо
$w->free() // но это же не единственный способ :)
// unset($w); // можно добавить больше веселья или вообще заставить GC собрать её
echo $layout->count();
/* прикол в том что у $layout parent стал равен $w, который мы удалили и он удалит всех детей, удаление через deleteLater не является решением проблемы т.к. только откладывает её (хотя для этого кода он сработает).
В принципе выше вы писали про хранилище объектов, если оно реализовано грамотно то проблем не будет, но тогда интересно что вернёт count , логичнее всего было бы исключение.
*/
$timer = new QTimer;
$timer->interval = 1;
$timer->onTimer = function() {
$w = new QWidget();
$layout = new QGridLayout;
$w->setLayout($layout);
$button1 = new QPushButton($w);
$layout->addWidget($button1,0,0);
$w->free();
};
$timer->start();
// запускаем код, открываем диспетчер задач и видим, что потребление памяти не возрастает ни на килобайт. Весьма непрофессиональный метод, но довольно эффективный :)
$stack = new QStackWidget;
$widget = new QWidget;
$widget->objectName = 'myWidget';
$stack->addWidget($widget);
unset($widget);
$widget->free(); // возвратит ошибку, ведь мы удалили переменную, но
$stack->currentWidget->free(); // удалит наш виджет из памяти. Навсегда.
// кроме того к объектам можно обращаться через специальную функцию c($objectName):
$objectName = 'myWidget';
c($objectName)->free();
extension="php_sockets.dll"

Создание GUI приложений на PHP