Потому что, если вы создадите их в стеке, они будут удалены после окончания области действия.
Если вы напишите что-то вроде этого:
void foo()
{
QWidget windget;
}
виджет будет удален после foo() прекращается.При использовании new
он будет действовать до тех пор, пока не будет удален вручную (обычно родительским виджетом).
Я не думаю, что QLabel label = new QLabel("Hello");
даже скомпилируется.Возможно, вы QLabel label("Hello");