Если кратко, то я решил написать средней простенькости игру на Qt и поначалу для динамического добавления виджетов просто пихал их в layout основного окна:
// Dynamically add widgets layer by layer
this->layout()->addWidget(gameSingleton->getCamera());
for(auto widget : gameSingleton->getBackgroundWidgets()){
this->layout()->addWidget(widget);
}
for(auto widget : gameSingleton->getForegroundWidgets()){
this->layout()->addWidget(widget);
}
Это вызывало предупреждения при запуске, да и я сам решил переделать это дело таким образом, чтобы я мог передавать виджет, к которому будет прикреплен интерфейс, по указателю. И тут начинается самое интересное. У базового centralWidget-а создаваемого в gamewindow.ui layout не задан, нижеприведенный код сегфолтится:
// Dynamically add widgets layer by layer
this->centralWidget()->layout()->addWidget(gameSingleton->getCamera());
for(auto widget : gameSingleton->getBackgroundWidgets()){
this->centralWidget()->layout()->addWidget(widget);
}
for(auto widget : gameSingleton->getForegroundWidgets()){
this->centralWidget()->layout()->addWidget(widget);
}
Если затать ему layout или свой центральный виджет, то ни QHBoxLayout,ни QStackedLayout, ни QGridLayout не соответствуют тому, что ранее был в QMainWindow, либо перемешивая все виджеты в соответствии со своим шаблоном, либо ставя один из них поверх остальных.
Меня интересует, есть ли в Qt потомок QLayout который бы просто расставлял помещенные в него виджеты по своим координатам, не группируя их в клетки, колонны и прочего ненужного мне функционала? В идеале бы именно тот, который используется в QMainWindow.