在 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 类?的主要内容,如果未能解决你的问题,请参考以下文章