【问题标题】:Using multiple Ui's and Ui classes in Qt?在 Qt 中使用多个 Ui 和 Ui 类?
【发布时间】: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->

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


【解决方案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();
    }
    

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    相关资源
    最近更新 更多