У меня проблема с установкой некоторых компонентов из кода в макет, созданный с помощью qt creator. Я пытаюсь добавить компоненты, и когда я запускаю свое окно, компоненты не отображаются, вот какой-то код, SlotPLayerWidget — это виджет, который я также создал используя QT Creator
'#include "joinwidget.h"#include "ui_joinwidget.h"#include "ui/joingameteamselectionwidget.h"#include <QDebug>
JoinWidget::JoinWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::JoinWidget)
{
ui->setupUi(this);
this->createPlayersSlots(8);
}
JoinWidget::~JoinWidget()
{
delete ui;
}
void JoinWidget::on_exitButton_clicked()
{
exit(0);
}
void JoinWidget::on_startGameButton_clicked()
{
//start game
}
void JoinWidget::on_mainMenuButton_clicked()
{
emit mainMenuButtonClicked();
}
void JoinWidget::setPlayerName(QString playerName){
this->playerName_ = playerName;
}
void JoinWidget::createPlayersSlots(int numberOfPlayers){
for(int i = 0;i< numberOfPlayers; i++){
SlotPlayerWidget widget;
ui->slotPlayersVerticalLayout->addWidget(&widget);
}
}'
Вы размещаете виджеты в стеке в createPlayersSlots
и это уничтожит виджеты, прежде чем вы сможете что-либо с ними сделать, чтобы исправить это, выделите виджеты в куче.
LE: Как правило, с помощью Qt всегда размещать дочерние виджеты в куче (это легко, потому что вам не нужно отслеживать каждый фрагмент памяти, родитель удаляет их при удалении) и виджет верхнего уровня (виджет, который не имеет родителя, это «главное окно» вашего приложения), которое вы можете разместить в стеке.
Других решений пока нет …