Have you tried not to create new / delete windows and just create once and later only hide / show them ?
I think you are creating a memory leak, because objects of class startWindow may not be deleted, you just hide() them and later you create new object without parent set. Imagine this sequence:
- open start window, click "english" (start window 1 hides)
- in mainWindow, click "backward" (start window 2 created)
- in start window 2, click "english" ( start window 2 hidden )
- continue with above steps ...
Looks like startWindows are created and hidden but never deleted, I can't be sure, maybe somewhere else you delete them.
If creating the widgets takes so much time, you can do that once, for example in startWindow constructor:
Qt Code:
  1. startWindow::startWindow( QWidget * parent ) : ...
  2. {
  3. ...
  4. this->_mainWindow = new MainWindow; // create and store mainWindow object
  5. this->_mainWindow->setStartWindow( this ); // here you can pass a pointer to this object
  6. // in order to show this window later
  7. }
  8.  
  9. // you can keep startWindow pointer as a member in mainWindow class
  10. void MainWindow::setStartWindow( startWindow * s ){
  11. this->_startWindow = s;
  12. }
  13.  
  14. // now your methods looks simpler
  15. void startWindow::on_english_clicked()
  16. {
  17. // MainWindow *other = new MainWindow; // no need to create new object each time
  18. _mainWindow->ui->tester->hide();
  19. _mainWindow->ui->textBrowser->hide();
  20. _mainWindow->ui->frame_2->hide();
  21. _mainWindow->show();
  22. this->hide();
  23. }
  24.  
  25. void MainWindow::on_backward_clicked()
  26. {
  27. videoplayer->stop();
  28. videoplayer->hide();
  29. // startWindow *start=new startWindow;
  30. this->_startWindow->show();
  31. this->close();
  32. }
To copy to clipboard, switch view to plain text mode 
This way you can avoid creating new widgets each time.