【问题标题】:How to open a second QMainWindow from my first/original MainWindow?如何从我的第一个/原始 MainWindow 打开第二个 QMainWindow?
【发布时间】:2021-06-22 17:51:05
【问题描述】:

我正在使用 Qt6 和 C++ 创建一个桌面应用程序,并且我有我原来的 MainWindow 类。使用 Qt Creator 我为新的 SummaryClass (QMainWindow) 生成了 ui,h,cpp。 我希望能够单击位于 MainWindow 中的按钮,以便我可以打开 SummaryWindow。

  void MainWindow::openSummary()
    {
    SummaryWindow window;
    window.show();
    }

我知道在函数结束时窗口实例超出范围并被销毁。 (由 Qt Creator 生成的析构函数被自动调用)因为窗口出现然后很快消失。 如果我只是执行

SummaryWindow window = new SummaryWindow();
window.show();

窗口会成功显示,但随后会造成内存泄漏。

对于我想要实现的目标,是否有变通方法/解决方案?

为了清楚起见,我想打开窗口并让两个窗口都可见。

【问题讨论】:

  • 只要让SummaryWindow window; 成为MainWindow 的非静态类成员,不是吗?
  • @G.M.是的,这就是解决方案,非常感谢。

标签: c++ qt memory-leaks qt5 desktop-application


【解决方案1】:

另一种方法是定义一个指向 summaryClass 的指针列表,然后在主窗口中按钮的插槽中创建并显示尽可能多的摘要实例

你的主窗口.h

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    QList<SummaryClass*> l;
};

和按钮的槽

void MainWindow::on_pushButton_clicked()
{
    SummaryClass* sm = new SummaryClass(this);
    l.push_back(sm);
    sm->show();
}

只要你这样做:

new SummaryClass(this);

mainWin被销毁时,每个summary类都会被销毁......


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多