Почему если вызывать QWidget::show() через точку, то не показывает?
достаточно мне заменить точку на стрелочку и, разумеется, объект на указатель на объект и (о чудо!) всё работает
Самого главного не сказал: "и объект QWidget на стеке текущей функции на объект в куче".Чисто академический вопрос: почему так?
Потому что в первом случае виджет разрушается при выходе из функции show_widget, а во втором остаётся болтаться в куче. Выход происходит сразу после возврата из QWidget::show, а сам этот вызов неблокирующий.
Вам уже ответили правильно, хочу добавить что в Qt все окна и контролы нужно создавать в куче ( так как тогда сама Qt сможет корректно их удалить ). Кроме того при создании нового объекта не забывайте указать ему на его родителя ( в вашем случае при создании QWidget внутри класса Widget - QWidget* w = new QWidget(this);
QLineEdit *line = new QLineEdit(w);