c++ - 用 qt c++ 显示新框架

标签 c++ qt window

当我点击一个按钮时我需要打开一个新的 QMainWindow。我会理解为什么它适用于指针而不适用于引用:

触发新窗口的插槽如下,它应该打开两个窗口,但只有用新操作符创建的窗口显示出来:

MyWin win1(this);
win1.show();
MyWin *win2 = new MyWin(this);
win2->show();

下面是MyWin.h和MyWin.ccp

#ifndef MyWin_H
#define MyWin_H
#include <QMainWindow>

namespace Ui {
class FrmManipolo1;
}


Class MyWin : public QMainWindow
Q_OBJECT

public:
    explicit MyWin(QMainWindow *parent = 0);
    ~MyWin();

    private:
    Ui::MyWin *ui;
};

#endif

MyWin.cpp

include "MyWin.h"
include "ui_MyWin.h"

MyWin::MyWin(QMainWindow *parent) :
QMainWindow(parent),
ui(new Ui::MyWin)
{
    ui->setupUi(this);
}

MyWin::~MyWin()
{
    delete ui;
}

最佳答案

这行不通:

MyWin win1(this);
win1.show();

因为它在堆栈上创建了 win1 对象,所以 win1 对象在当前范围的末尾被销毁,然后才可以实际绘制。

这个有效:

MyWin *win2 = new MyWin(this);
win2->show();

因为对象是在堆上分配的,它的生命周期不会在当前范围结束,当你在它的地址上调用 delete 时它就会结束(win2 指针,它只保存地址对象,而不是实际对象),否则在您的情况下父级将调用 delete(因为您将 this 指针作为父级参数传递给构造函数)。

关于c++ - 用 qt c++ 显示新框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43584940/

相关文章:

c++ - 为什么下限不适用于 vector 对

c++ - 函数模板参数和采用 'auto' 的函数参数有什么区别?

c# - 带 C# 的 SFML,启动麻烦

c++ - 在 C++ 中设置 var 的语法

c++ - 使用VS2012构建wxWidgets后,我可以删除lib文件夹中的哪些文件?

c++ - QPluginLoader 实例总是返回 null

c++ - QActions是如何被删除的

c++ - 如何在命令行上使用 Qt 进行是/否对话?

javascript - 将脚本插入 iFrame 的页眉,而不清除 iFrame 的主体

android - 非 Activity 时如何访问窗口?