用QT C 显示新框架

Show new frame with qt c++

本文关键字:框架 新框架 QT 显示      更新时间:2023-10-16

当我单击按钮时,我需要打开一个新的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指针作为父参数传递给构造函数(。