Открывается два виджета одновременно

242
20 мая 2018, 22:20

У меня есть 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);
}
Answer 1

Используй

QWidget::setParent()

или

QLayout::addWidget()

Также, когда динамически создаешь виджет можешь сразу указывать родителя (По умолчанию там либо 0 либо nullptr). Например:

mStudentWidget = new StudentWidget(ptr) //ptr - указатель на твое главное окно
READ ALSO
Нужен ли тут конструктор копирования

Нужен ли тут конструктор копирования

Вообщем есть такое задание

258
ReaFile считать 0 байт

ReaFile считать 0 байт

Вопрос на теориюЕсть функция ОС ReadFile (https://msdn

198
Как установить флаги компилятор через cmake?

Как установить флаги компилятор через cmake?

столкнулся с проблемой, для компилирования программы надо указать gcc флаги -I -L -lТак вот не получается установить данные флаги в cmake

326
Как можно синхронизировать C++ и Python

Как можно синхронизировать C++ и Python

Всем привет! Столкнулся с такой необходимостью, у меня есть код, написанный на C++ это программа со статистикой(там диаграмма и графики)И есть...

214