Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QTDesigner Widget crashs, when trying to do anything with its Widgets.
Forum Updated to NodeBB v4.3 + New Features

QTDesigner Widget crashs, when trying to do anything with its Widgets.

Scheduled Pinned Locked Moved Solved General and Desktop
cppqwidgetcrash appqvboxlayoutconstructor
3 Posts 2 Posters 704 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • BDC_PatrickB Offline
    BDC_PatrickB Offline
    BDC_Patrick
    wrote on last edited by BDC_Patrick
    #1

    hi there..

    I created a simple Widget with QTDesigner, that only contains one QVBoxLayout, called "VLays".

    The *.ui File:

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>TGS_Widget_AssetList</class>
     <widget class="QWidget" name="TGS_Widget_AssetList">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>400</width>
        <height>668</height>
       </rect>
      </property>
      <property name="sizePolicy">
       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="windowTitle">
       <string>TGS_Widget_AssetList</string>
      </property>
      <layout class="QVBoxLayout" name="verticalLayout">
       <property name="spacing">
        <number>0</number>
       </property>
       <property name="leftMargin">
        <number>4</number>
       </property>
       <property name="topMargin">
        <number>4</number>
       </property>
       <property name="rightMargin">
        <number>4</number>
       </property>
       <property name="bottomMargin">
        <number>4</number>
       </property>
       <item>
        <layout class="QVBoxLayout" name="VLays">
         <property name="spacing">
          <number>0</number>
         </property>
        </layout>
       </item>
      </layout>
     </widget>
     <resources/>
     <connections/>
    </ui>
    

    The *.h File:

    #ifndef TGS_WIDGET_ASSETLIST_H
    #define TGS_WIDGET_ASSETLIST_H
    
    #include <QWidget>
    #include <boost/property_tree/ptree.hpp>
    #include <iostream>
    
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class TGS_Widget_AssetList; }
    QT_END_NAMESPACE
    
    class TGS_Widget_AssetList : public QWidget {
    Q_OBJECT
    
    public:
        explicit TGS_Widget_AssetList(QWidget *parent = nullptr);
        ~TGS_Widget_AssetList() override;
        void _test();
    
    private:
        Ui::TGS_Widget_AssetList *ui;
    };
    
    
    #endif //TGS_WIDGET_ASSETLIST_H
    

    And the *.cpp File:

    #include "tgs_widget_assetlist.h"
    #include "ui_TGS_Widget_AssetList.h"
    
    TGS_Widget_AssetList::TGS_Widget_AssetList(QWidget *parent) :
            QWidget(parent), ui(new Ui::TGS_Widget_AssetList) {
        ui->setupUi(this);
            std::cout << "Start Construct" << std::endl;
            ui->VLays->addStretch();
            std::cout << "Constructed" << std::endl;
    TGS_Widget_AssetList::~TGS_Widget_AssetList() {
        delete ui;
    }
    
    void TGS_Widget_AssetList::_test() {
        std::cout << "Hello" << std::endl;
    }
    

    EDIT 1:
    I added this to the test Function:

        if(ui->VLays->isEmpty()){
            std::cout << "VLays is empty" << std::endl;
        }else{
            std::cout << "VLays is filled with Stuff" << std::endl;
        }
    

    But it crashes, without firing the couts...

    This Widget is created.. as child of a scrollArea..
    This way:

    [...]
    // _assetList is a Pointer in the privates of the MainWindow
        if(_assetList == nullptr){
            _assetList = new TGS_Widget_AssetList();
            //Add the List object to the layout of the ScrollArea Contents
            ui->scrollArea_AssetListContents->layout()->addWidget(_assetList);
            _assetList->show();
        }
    [...]
    

    but neither the first cout, nor the second one is fired. As if the constructor is never called.

    So.. whenever i want to interact with anything, or just want to cout things in the constructor.. the whole app crashes with exit code -1073741819 (0xC0000005)...

    But i am able to fire the test function... and it prints the cout..

    So.. i compared the files with my previously created QWidgets, and can´t find a Mistake, that causes that Problem..

    Perhaps you guys can help me out here.. since i´m confused, what the Problem could be..

    #===============================================
    EDIT 2 - SOLUTION:
    found out, that i needed to create a new Pointer in the Declaration of the .h File..

    Means..

    TGS_Widget_AssetList * _assetList;
    

    Wasn´t enough...
    I needed to doe:

    TGS_Widget_AssetList *_assetList = new TGS_Widget_AssetList(this);
    or
    auto *_assetList = new TGS_Widget_AssetList(this);
    
    JonBJ 1 Reply Last reply
    0
    • BDC_PatrickB BDC_Patrick

      hi there..

      I created a simple Widget with QTDesigner, that only contains one QVBoxLayout, called "VLays".

      The *.ui File:

      <?xml version="1.0" encoding="UTF-8"?>
      <ui version="4.0">
       <class>TGS_Widget_AssetList</class>
       <widget class="QWidget" name="TGS_Widget_AssetList">
        <property name="geometry">
         <rect>
          <x>0</x>
          <y>0</y>
          <width>400</width>
          <height>668</height>
         </rect>
        </property>
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
          <horstretch>0</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
        <property name="windowTitle">
         <string>TGS_Widget_AssetList</string>
        </property>
        <layout class="QVBoxLayout" name="verticalLayout">
         <property name="spacing">
          <number>0</number>
         </property>
         <property name="leftMargin">
          <number>4</number>
         </property>
         <property name="topMargin">
          <number>4</number>
         </property>
         <property name="rightMargin">
          <number>4</number>
         </property>
         <property name="bottomMargin">
          <number>4</number>
         </property>
         <item>
          <layout class="QVBoxLayout" name="VLays">
           <property name="spacing">
            <number>0</number>
           </property>
          </layout>
         </item>
        </layout>
       </widget>
       <resources/>
       <connections/>
      </ui>
      

      The *.h File:

      #ifndef TGS_WIDGET_ASSETLIST_H
      #define TGS_WIDGET_ASSETLIST_H
      
      #include <QWidget>
      #include <boost/property_tree/ptree.hpp>
      #include <iostream>
      
      
      QT_BEGIN_NAMESPACE
      namespace Ui { class TGS_Widget_AssetList; }
      QT_END_NAMESPACE
      
      class TGS_Widget_AssetList : public QWidget {
      Q_OBJECT
      
      public:
          explicit TGS_Widget_AssetList(QWidget *parent = nullptr);
          ~TGS_Widget_AssetList() override;
          void _test();
      
      private:
          Ui::TGS_Widget_AssetList *ui;
      };
      
      
      #endif //TGS_WIDGET_ASSETLIST_H
      

      And the *.cpp File:

      #include "tgs_widget_assetlist.h"
      #include "ui_TGS_Widget_AssetList.h"
      
      TGS_Widget_AssetList::TGS_Widget_AssetList(QWidget *parent) :
              QWidget(parent), ui(new Ui::TGS_Widget_AssetList) {
          ui->setupUi(this);
              std::cout << "Start Construct" << std::endl;
              ui->VLays->addStretch();
              std::cout << "Constructed" << std::endl;
      TGS_Widget_AssetList::~TGS_Widget_AssetList() {
          delete ui;
      }
      
      void TGS_Widget_AssetList::_test() {
          std::cout << "Hello" << std::endl;
      }
      

      EDIT 1:
      I added this to the test Function:

          if(ui->VLays->isEmpty()){
              std::cout << "VLays is empty" << std::endl;
          }else{
              std::cout << "VLays is filled with Stuff" << std::endl;
          }
      

      But it crashes, without firing the couts...

      This Widget is created.. as child of a scrollArea..
      This way:

      [...]
      // _assetList is a Pointer in the privates of the MainWindow
          if(_assetList == nullptr){
              _assetList = new TGS_Widget_AssetList();
              //Add the List object to the layout of the ScrollArea Contents
              ui->scrollArea_AssetListContents->layout()->addWidget(_assetList);
              _assetList->show();
          }
      [...]
      

      but neither the first cout, nor the second one is fired. As if the constructor is never called.

      So.. whenever i want to interact with anything, or just want to cout things in the constructor.. the whole app crashes with exit code -1073741819 (0xC0000005)...

      But i am able to fire the test function... and it prints the cout..

      So.. i compared the files with my previously created QWidgets, and can´t find a Mistake, that causes that Problem..

      Perhaps you guys can help me out here.. since i´m confused, what the Problem could be..

      #===============================================
      EDIT 2 - SOLUTION:
      found out, that i needed to create a new Pointer in the Declaration of the .h File..

      Means..

      TGS_Widget_AssetList * _assetList;
      

      Wasn´t enough...
      I needed to doe:

      TGS_Widget_AssetList *_assetList = new TGS_Widget_AssetList(this);
      or
      auto *_assetList = new TGS_Widget_AssetList(this);
      
      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by
      #2

      @BDC_Patrick
      If you say the program "crashes", compile it for debug, run it in the debugger, and look at the stack trace when it crashes.

      Put breakpoints or qDebug() messages into, say, the constructor if you think that is not being executed. Step over/into lines in your code to follow what is being executed.

      BDC_PatrickB 1 Reply Last reply
      3
      • JonBJ JonB

        @BDC_Patrick
        If you say the program "crashes", compile it for debug, run it in the debugger, and look at the stack trace when it crashes.

        Put breakpoints or qDebug() messages into, say, the constructor if you think that is not being executed. Step over/into lines in your code to follow what is being executed.

        BDC_PatrickB Offline
        BDC_PatrickB Offline
        BDC_Patrick
        wrote on last edited by BDC_Patrick
        #3

        @JonB
        Thanks.. found out, that i needed to create a new Pointer in the Declaration of the .h File..

        Means..

        TGS_Widget_AssetList * _assetList;
        

        Wasn´t enough...
        I needed to do:

        TGS_Widget_AssetList *_assetList = new TGS_Widget_AssetList(this);
        or
        auto *_assetList = new TGS_Widget_AssetList(this);
        

        Now it works.. i will update my initial post here

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved