我创建了自己的类,这里是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);
}
在回调中,我创建了一些小部件,例如QLabel
或QLineEdit
。
这是我的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);
。请帮助,谢谢。
答案 0 :(得分:1)
没问题。我忘了Qt在应用new时删除了之前的QWidget
。我是这样做的:
在创建apply()
的新实例后,不会在构造函数中调用回调,仅在函数QWidget
中调用。现在它很棒。谢谢,drescherjm
!