用qt c ++显示新框架

时间:2017-04-24 09:52:17

标签: c++ qt window

当我点击一个按钮时,我需要打开一个新的QMainWindow。我会理解为什么它与指针一起使用并且不能用于引用:

触发新窗口的插槽如下,它应该打开两个窗口,但只显示使用new运算符创建的窗口:

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;
}

1 个答案:

答案 0 :(得分:2)

这不起作用:

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

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

这有效:

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

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