在Qt中使用多个Ui和Ui类?

时间:2014-05-11 13:56:32

标签: c++ qt qtgui qmainwindow qt-signals

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

void MainWindow::on_pushButton_2_clicked()
{
    this->hide();
    Browser browser;
    browser.show();
}

Browser中的构造函数很简单ui->setupUi(this)

Browser窗口打开然后立即关闭时会发生什么。

2 个答案:

答案 0 :(得分:2)

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

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

因为我认为它不是模态的。

答案 1 :(得分:1)

这是因为你在堆栈上分配浏览器对象,然后它会在函数结束时立即被销毁。

void MainWindow::on_pushButton_2_clicked()
{
    hide();
    Browser browser; // <--- constructed
    browser.show();
}                    // <--- destructed

您有两种方法可以解决它:

  • 将它作为一个堆对象,使用&#34;这个&#34;作为父母。这将确保对象在函数结束时不被销毁,但也不会泄漏,因为当父对象被销毁时,子对象也会被Qt父/子层次结构自动销毁。

    void MainWindow::on_pushButton_2_clicked()
    {
        hide();
        Browser *browser = new Browser(this);
        browser->show();
    }           
    
  • 将其作为班级成员。这将比函数的范围更长,所以没关系。

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