У меня есть 4 виджета : startWidget, mainWidget, student widget, teacherWidget. В startWidget я выбираю который открыть student widget или teacherWidget и на заднем фоне у меня открыт mainWidget. Как сделать чтобы student widget, teacherWidget открывалися в mainWidget а не в другом окне?
#include "StudyTests.h"
#include "MainWidget.h"
#include "StudentWidget.h"
#include "TeacherWidget.h"
#include "StartProgramMenuWidget.h"
#include "HelpWidget.h"
int StudyTests::runGame()
{
mMainWidget = new MainWidget();
mMainWidget->show();
StartProgramMenuWidget startProgramMenu;
connect(&startProgramMenu, SIGNAL(startProgramStudent()), this,
SLOT(startProgramStudent()));
connect(&startProgramMenu, SIGNAL(startProgramTeacher()), this,
SLOT(startProgramTeacher()));
connect(&startProgramMenu, SIGNAL(exitProgram()), this,
SLOT(exitProgram()));
connect(&startProgramMenu, SIGNAL(showHelp()), this, SLOT(showHelp()));
startProgramMenu.exec();
return 0;
}
void StudyTests::startProgramStudent()
{
mStudentWidget = new StudentWidget();
mStudentWidget->show();
mMainWidget->close();
}
void StudyTests::startProgramTeacher()
{
mTeacherWidget = new TeacherWidget();
mTeacherWidget->show();
mMainWidget->close();
}
void StudyTests::exitProgram()
{
mMainWidget->close();
}
void StudyTests::showHelp()
{
HelpWidget helpWidget;
helpWidget.exec();
}
StudyTests::~StudyTests()
{
delete mMainWidget;
delete mStudentWidget;
delete mTeacherWidget;
}
mainWidget
#include "MainWidget.h"
#include "StudentWidget.h"
#include "TeacherWidget.h"
MainWidget::MainWidget(QWidget* parent)
: QWidget(parent)
{
setWindowTitle("Тести");
setWindowModality(Qt::WindowModal);
}
MainWidget::~MainWidget()
{
}
UPD:
void MainWidget::setStudent()
{
mStudentWidget->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Expanding);
mStudentWidget->setParent(this);
QVBoxLayout* vLayout = new QVBoxLayout;
vLayout->addWidget(mStudentWidget);
setLayout(vLayout);
}
void MainWidget::setTeacher()
{
mTeacherWidget->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Expanding);
mTeacherWidget->setParent(this);
QVBoxLayout* vLayout = new QVBoxLayout;
vLayout->addWidget(mTeacherWidget);
setLayout(vLayout);
}
Используй
QWidget::setParent()
или
QLayout::addWidget()
Также, когда динамически создаешь виджет можешь сразу указывать родителя (По умолчанию там либо 0 либо nullptr). Например:
mStudentWidget = new StudentWidget(ptr) //ptr - указатель на твое главное окно
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости