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

Posted

技术标签:

【中文标题】在 Qt 中使用多个 Ui 和 Ui 类?【英文标题】:Using multiple Ui's and Ui classes in Qt? 【发布时间】:2014-05-11 13:56:32 【问题描述】:

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

void MainWindow::on_pushButton_2_clicked()

    this->hide();
    Browser browser;
    browser.show();

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

Browser 窗口打开然后立即关闭。

【问题讨论】:

请不要过度使用this-> 【参考方案1】:

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

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

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

【讨论】:

我想它是模态的,因为它摆脱了另一个窗口,但我认为它真的是非模态的,好像另一个窗口在那里,它仍然可以访问。这是对 Qt 中模态的正确理解吗? @JVE999 和 user2672165:Fwiw,“你需要”的答案不正确......这是一个选项,但不仅仅是这个选项。此外,澄清问题更适合在 cmets 中,因此最好将此类内容放在那里,或者在您的答案中写一个声明“提供......”等。 没错,这就是解决问题的具体方法。另外,我是一个指针向导 :) 我喜欢指针。不幸的是,我无法将两个标记为正确,所以我给了两个 +1 @JVE999:我不是说要选择哪个答案,我只是声称该答案将在您的选择中排在最前面,声称这是唯一的选择是不正确的.人们通常会阅读顶部的选定内容,他们会被告知这是唯一的方法。 调整了词汇量。我不是母语人士,但无论如何都能理解。【参考方案2】:

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

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();

【讨论】:

以上是关于在 Qt 中使用多个 Ui 和 Ui 类?的主要内容,如果未能解决你的问题,请参考以下文章

几个ui显示在一个窗口里

在已有QT项目中添加多个UI布局界面

在多个 ui 文件之间拆分 Qt 表单

QT基础 ui类设计和使用

如何在qt中加载使用QuiLoader加载的ui文件的类文件

Qt5 ui,多个窗口:如何从窗口 1 访问窗口 2 中的 Ui 对象