Thank you everbody, thanks to you I have found a way to correct my program. I did as you told me to do: I removed everything the Constructor object knew about its parent (puting it in the parent instead) and the problem went away. I still don't know from where it was coming, but we can clearly see that having a better-programmed program helps to correct some bugs. ^^
Thanks again to everybody. :D
If you want my corrected code, here it is:
main.cpp (nothing changed)
#include "Window.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	Window w;
	w.show();
	return a.exec();
}
Window.h
#ifndef DEF_WINDOW
#define DEF_WINDOW
#include "Constructor.h"
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <vector>
class Window : public QWidget
{
	Q_OBJECT
public:
	Window();
public slots:
	void addConstructor();
	void destroyConstructor(Constructor*);
private:
	QVBoxLayout* mainLayout = new QVBoxLayout;
	QVBoxLayout* constructorLayout = new QVBoxLayout;
	std::vector<Constructor*>* constructorVector = new std::vector<Constructor*>;
	QPushButton* addConstructorButton = new QPushButton("+", this);
};
#endif
Window.cpp
#include "Window.h"
Window::Window() 
{
	connect(addConstructorButton, SIGNAL(clicked()), this, SLOT(addConstructor()));
	mainLayout->addLayout(constructorLayout);
	mainLayout->addWidget(addConstructorButton);
	setLayout(mainLayout);
}
void Window::addConstructor() 
{
	Constructor* c = new Constructor(this);
	constructorLayout->addWidget(c);
	constructorVector->push_back(c);
	connect(c, SIGNAL(mustBeDestroyed(Constructor*)), this, SLOT(destroyConstructor(Constructor*)));
}
void Window::destroyConstructor(Constructor* c) 
{
	constructorLayout->removeWidget(c);
	//remove object from vector
	for (int i = 0; i < constructorVector->size(); i++)
		if (constructorVector->at(i) == c) {
			constructorVector->erase(constructorVector->begin() + i);
			break;
		}
}
Constructor,h
#ifndef DEF_CONSTRUCTOR
#define DEF_CONSTRUCTOR
#include <QWidget>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QPushButton>
#include <QLayout>
#include <vector>
class Constructor : public QWidget
{
	Q_OBJECT
public:
	Constructor(QWidget* parentWidget);
public slots:
	void destroySelf();
signals:
	void mustBeDestroyed(Constructor*);
private:
	QLineEdit* lineEdit = new QLineEdit(this);
	QPushButton* destroyConstructorButton = new QPushButton("-", this);
};
#endif
Constructor.cpp
#include "Constructor.h"
Constructor::Constructor(QWidget* parentWidget) : QWidget(parentWidget)
{
	connect(destroyConstructorButton, SIGNAL(clicked()), this, SLOT(destroySelf()));
	QHBoxLayout* layout = new QHBoxLayout;
	layout->addWidget(lineEdit);
	layout->addWidget(destroyConstructorButton);
	setLayout(layout);
}
void Constructor::destroySelf()
{
	delete lineEdit;
	delete destroyConstructorButton;
	emit mustBeDestroyed(this);
	this->disconnect();
	delete this;
}