c++ - Adding a class layout to another class layout: "The program has unexpectedly finished." -


i've created class , add class in other 1 (both layouts) error message program crashed.

i feel there obvious logic flaw don't find it, can show both of them separately when try add 1 other program crashes. here code:

mesure.h:

class mesure : public qwidget {     public:     mesure(qstring angle);      private:     qtoolbutton *m_buttonclose;     qhboxlayout *m_hlayoutmesure;     qcheckbox *m_checkboxmesure;     qlabel *m_labelangle; }; 

mesure.cpp:

mesure::mesure(qstring angle) : qwidget() {     qhboxlayout *m_hlayoutmesure = new qhboxlayout;     qcheckbox *m_checkboxmesure = new qcheckbox(this);     qtoolbutton *m_buttonclose = new qtoolbutton(this);     qlabel *m_labelangle = new qlabel(angle, this);      m_buttonclose->settext("x");      m_hlayoutmesure->addwidget(m_checkboxmesure);     m_hlayoutmesure->addwidget(m_labelangle);     m_hlayoutmesure->addwidget(m_buttonclose);      setlayout(m_hlayoutmesure); } 

panneaumesure.h:

class panneaumesure : public qwidget {     public:     panneaumesure();     void add(mesure *mesure);      private:     qvboxlayout *m_vlayoutmesures; }; 

panneaumesure.cpp:

panneaumesure::panneaumesure() : qwidget() {     qvboxlayout *m_vlayoutmesures = new qvboxlayout;     setlayout(m_vlayoutmesures); }  void panneaumesure::add(mesure *mesure) {     m_vlayoutmesures->addwidget(mesure);     setlayout(m_vlayoutmesures); } 

main.cpp:

int main(int argc, char *argv[]) {     qapplication app(argc, argv);      panneaumesure panneau;     mesure mesure("14°");     panneau.add(&mesure);      return app.exec(); } 

edit: problem solved, had modify files this:

mesure.cpp:

mesure::mesure(qstring angle) : qwidget(),     m_hlayoutmesure(new qhboxlayout(this)),     m_checkboxmesure(new qcheckbox(this)),     m_buttonclose(new qtoolbutton(this)),     m_labelangle(new qlabel(angle, this)) {     m_buttonclose->settext("x");      m_hlayoutmesure->addwidget(m_checkboxmesure);     m_hlayoutmesure->addwidget(m_labelangle);     m_hlayoutmesure->addwidget(m_buttonclose);      setlayout(m_hlayoutmesure); } 

panneaumesure.cpp:

panneaumesure::panneaumesure() : qwidget(),     m_vlayoutmesures( new qvboxlayout(this)) {     setlayout(m_vlayoutmesures); }  void panneaumesure::add(mesure *mesure) {     m_vlayoutmesures->addwidget(mesure);     setlayout(m_vlayoutmesures); } 

in constructors, create local variables hide class members. store pointers allocated elements in these local variables, actual class variables left default-initialized (i.e. contain garbage).

when accessing these garbage values (as in panneaumesure::add) end having undefined behaviour, time crash (lucky you!)

as sidenote, should use initializer lists initialize class variables, this:

mesure::mesure(qstring angle):     qwidget(),     m_hlayoutmesure(new qhboxlayout(this)), // use parented constructor                                             // when available in qt     // ... {     // logic } 

also, don't need call setlayout repeatedly.


Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -