Qt:如何在按钮上打开一个新的主窗口并删除原始主窗口?

时间:2014-09-11 07:03:44

标签: c++ qt

我有main.cppMainWindow.hMainWindow.cpp个文件。我在这个原始主窗口上有一个按钮。我想要的是当我点击按钮时,它应该带我到一个新的主窗口并删除原来的主窗口。

我也想遵循良好的编程习惯。所以我想知道是否应该创建SecondWindow.cpp/.h这样的新源文件和头文件,或者在我MainWindow.cpp SLOT定义的on_button_clicked()中完成所有这些?

2 个答案:

答案 0 :(得分:1)

你需要:

  1. 实例化新窗口并显示它。
  2. 一旦控件返回事件循环,就删除当前窗口。

    void MainWindow::on_button_clicked() {
      auto win = new MainWindow();
      win->setAttribute( Qt::WA_DeleteOnClose );
      win->show();
      deleteLater();
    }
    
  3. 确保在堆上创建窗口的初始实例:

    int main(int argc, char** argv) {
      QApplication app(argc, argv);
      auto win = new MainWindow;
      win->setAttribute( Qt::WA_DeleteOnClose );
      win->show(); 
      return app.exec();
    }
    

答案 1 :(得分:0)

Kuba Ober给出的答案是有效的。但是,无论您按下按钮多少次,您都可以始终只有2个主窗口。它在第二次运行后似乎崩溃了。 我相信我的解决方案会更好,因为你可以打开尽可能多的主窗口。

在您的MainWindow标题:

private:
Ui::MainWindow *ui;
MainWindow *nWin; //Add This bit of code here

关于你的触发事件功能:

void MainWindow::on_actionNew_triggered()
{
   nWin = new MainWindow;
   nWin->show();

}

应该这样做。

感谢。