gpt4 book ai didi

c++ - Qt 主窗口崩溃

转载 作者:行者123 更新时间:2023-11-30 04:06:33 26 4
gpt4 key购买 nike

编辑:我从插槽中删除了析构函数。但是现在我有内存泄漏问题。我打开的每个新窗口都占用一些内存,当我关闭它时,内存保持占用

当我执行程序并打开新窗口时,它们可以正常打开。当我关闭它们中的任何一个时,整个应用程序都会崩溃(不仅是那个特定的窗口),而且我会收到崩溃错误。

我做错了什么?

ma​​inWindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
class QHBoxLayout;
class QTextEdit;
class QWidget;
class QDialog;
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void closeWindow();
void newWindow();

private:
Ui::MainWindow *ui;
MainWindow *tempMainWindow;
QHBoxLayout * mainLyt;
QTextEdit *txtEdit;
QWidget *mainWidget;
};

#endif // MAINWINDOW_H

主窗口.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QWidget>
#include <QHBoxLayout>
#include <QTextEdit>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
mainWidget=new QWidget();
mainLyt=new QHBoxLayout();
txtEdit=new QTextEdit();
mainLyt->addWidget(txtEdit);
mainWidget->setLayout(mainLyt);
setCentralWidget(mainWidget);
connect(ui->actionExit,SIGNAL(triggered()),this,SLOT(closeWindow()));
connect(ui->actionNew,SIGNAL(triggered()),this,SLOT(newWindow()));
}

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

void MainWindow::closeWindow()
{
this->close();
delete txtEdit;
delete mainLyt;
delete mainWidget;
this->~MainWindow();
}

void MainWindow::newWindow()
{
tempMainWindow=new MainWindow(this);
tempMainWindow->show();
}

最佳答案

如果你传递给 QWidget()QHBoxLayout()QTextEdit() 还有 this(是父项),在选择 MainWindow 时,Qt 将为您删除 ui 和您在构造函数中定义的所有其他小部件。这样就可以避免调用 closeWindow() 方法。

delete ui 也不是必须的。

ui->setupUi(this);
mainWidget = new QWidget(this);
mainLyt = new QHBoxLayout(this);
txtEdit = new QTextEdit(this);

关于c++ - Qt 主窗口崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com