Qt:更改centralWidget时崩溃

时间:2014-10-21 15:15:28

标签: c++ qt class

我创建了自己的类,这里是ewindow.h

#ifndef EWINDOW_H
#define EWINDOW_H
#include <QWidget>
#include <QString>
#include <mainwindow.h>

class MainWindow;

class EWindow
{
    public:
        EWindow(void (*callback)(EWindow*, MainWindow*), MainWindow *window, QString name, QString title);
        QWidget *widget;
        void resize(int width, int height);
        void move(int x, int y);
        void move();
        void apply();
        void append(QWidget *newWidget);
        int* getSize();
        ~EWindow();

    private:
        int width, height, x, y;
        QString name, title;
        MainWindow *window;
};

#endif // EWINDOW_H

构造

EWindow::EWindow(void (*callback)(EWindow*, MainWindow*), MainWindow *window, QString name, QString title) {
    this->width = 0;
    this->height = 0;
    this->x = -1;
    this->y = -1;
    this->name = name;
    this->title = title;
    this->window = window;
    this->widget = new QWidget();
    (*callback)(this, window);
}

在回调中,我创建了一些小部件,例如QLabelQLineEdit。 这是我的apply函数:

void EWindow::apply() {
    window->setCentralWidget(this->widget);
    window->setWindowTitle(this->title);
    window->setFixedWidth(this->width);
    window->setFixedHeight(this->height);
    if (this->x == -1 || this->y == -1) this->move();
    window->move(this->x, this->y);
}

但是!当我尝试为不同的EWindows调用应用功能2次时,我的程序崩溃没有任何错误。我认为这行中的错误:window->setCentralWidget(this->widget);。请帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

没问题。我忘了Qt在应用new时删除了之前的QWidget。我是这样做的:

在创建apply()的新实例后,不会在构造函数中调用回调,仅在函数QWidget中调用。现在它很棒。谢谢,drescherjm