当我点击一个按钮时我需要打开一个新的 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/