Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用多用户界面';Qt中的s和Ui类?_C++_Qt_Qtgui_Qmainwindow_Qt Signals - Fatal编程技术网

C++ 使用多用户界面';Qt中的s和Ui类?

C++ 使用多用户界面';Qt中的s和Ui类?,c++,qt,qtgui,qmainwindow,qt-signals,C++,Qt,Qtgui,Qmainwindow,Qt Signals,我有一个简单的程序,我不记得如何在同一个程序中使用多个Ui表单类。我有main窗口类,它有一个按钮,可以打开浏览器类。这些类几乎都是它们的默认值,这是我用来打开浏览器类ui的: void MainWindow::on_pushButton_2_clicked() { this->hide(); Browser browser; browser.show(); } 浏览器中的构造函数是简单的ui->setupUi(this) 所发生的情况是浏览器窗口打开,然后立即关

我有一个简单的程序,我不记得如何在同一个程序中使用多个Ui表单类。我有
main窗口
类,它有一个按钮,可以打开
浏览器
类。这些类几乎都是它们的默认值,这是我用来打开
浏览器
类ui的:

void MainWindow::on_pushButton_2_clicked()
{
    this->hide();
    Browser browser;
    browser.show();
}
浏览器中的构造函数是简单的
ui->setupUi(this)


所发生的情况是
浏览器
窗口打开,然后立即关闭

您可以在堆上创建浏览器,即:

Browser* browser=new Browser(this);
browser->show();

因为我假设它不是模态的。

这是因为您正在堆栈上分配browser对象,然后它在函数结束时立即被销毁

void MainWindow::on_pushButton_2_clicked()
{
    hide();
    Browser browser; // <--- constructed
    browser.show();
}                    // <--- destructed
  • 作为班级成员。这将超出函数的范围,因此不会有问题

    void MainWindow::on_pushButton_2_clicked()
    {
        hide();
        m_browser.show();
    }
    

  • 我认为这是一种模态,因为它去掉了另一个窗口,但我认为它实际上是非模态的,好像另一个窗口在那里,它仍然可以访问。这是对Qt中模态的正确理解吗?@JVE999和user2672165:Fwiw,答案在“您需要”处是不正确的。。。这是一种选择,但不仅仅是这一种选择。此外,澄清问题更适合于评论,因此最好将此类内容放在评论中,或者在回答中写一句“提供…”等。没错,这就是解决问题的具体方法。另外,我是指针向导:)我喜欢指针。不幸的是,我不能将两个标记为正确,所以我给了两个a+1@JVE999:我不是说要选择哪一个答案,我只是说,根据您的选择,到目前为止,这个答案将位于顶部,并且声称这是唯一的选项是不正确的。人们通常会阅读顶部的选定内容,他们会被告知这是唯一的方法。调整词汇。我不是以英语为母语的人,但大家都能理解。请不要过度使用
    this->
    void MainWindow::on_pushButton_2_clicked()
    {
        hide();
        m_browser.show();
    }