EgoRusMarch
@EgoRusMarch
C++ Developer

Qt. Как создать с инициализацией объект класса с членами-объектами на стеке?

Вот так создаю объекты члены в классе:
b33edd8c202245a0867e2a6770c15c7f.png
Вот так в конструкторе:
0b2cb8b1cbc74ea28350164ca41ba201.png
Но как выделить память на стеке, а не в куче?
Вот так нельзя:
QLabel      Title;
QLineEdit   Input;
QLineEdit   Output;
QComboBox   UnitWI;
QComboBox   UnitWO;
QPushButton Button;

Нужно инициализировать, например так:
QLabel Title(this);
Вместе с функциями, вроде того для статических только вроде:
QLabel Widget::Title(this);
  • Вопрос задан
  • 685 просмотров
Решения вопроса 1
EgoRusMarch
@EgoRusMarch Автор вопроса
C++ Developer
Решил. Создаем объекты:
QLabel      Title;
QLineEdit   Input;
QLineEdit   Output;
QComboBox   UnitWI;
QComboBox   UnitWO;
QPushButton Button;

и затем устанавливаем родителя методом setParent().

Но как оказалось, выделение памяти на стеке для виджетов - очень плохая затея.
Связанно это с переполнением стека и с тем, что при создании нескольких несвязанных иерархией виджетов приведет к ошибке (исключению).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
А вы не создавайте их на стеке ;)
Ответ написан
Комментировать
@abcd0x00
Они там сами потом освобождаются (для этого ты их и привязываешь к родителям). Поэтому если ты привяжешь к чему-нибудь элемент, для которого не выделялась динамическая память, то эта освобождалка всё равно будет его освобождать, что и даст выпадение программы. Так что делай, как все делают - выделяй память и привязывай.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы