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

Using multiple Ui's and Ui classes in Qt?

本文关键字:Ui UI Qt      更新时间:2023-10-16

我有一个简单的程序,我不记得如何在同一程序中使用多个Ui表单类。我有MainWindow类,它有一个按钮,打开Browser类。这些类基本上都是默认的,这就是我用来打开Browser类ui的方法:

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

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

发生的是Browser窗口打开,然后立即关闭。

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

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

因为我认为它不是模态

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

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

你有两个选项来修复它:

  • 使它成为一个以"this"为父对象的堆对象。这将确保对象不会在函数结束时被销毁,但也不会泄漏,因为当父类被销毁时,子类也会随着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();
    }