Skip to content
  • 0 Votes
    2 Posts
    1k Views
    K

    Hi,
    I am facing the same problem using Qt 5.12.4 and msvc2019.

    The following error occurred: Error reading VS project settings.

    Does anyone have a solution for that? I tried reinsalling VS, didnt work.
    Tried different qt vs tools didnt work.
    Any information is appreciated, thanks!

  • 0 Votes
    7 Posts
    3k Views
    L

    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; }