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 Update on Monday, May 27th 2025

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 703 Views
  • 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.
  • B Offline
    B Offline
    BDC_Patrick
    wrote on 14 Jan 2022, 14:54 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);
    
    J 1 Reply Last reply 14 Jan 2022, 15:41
    0
    • B BDC_Patrick
      14 Jan 2022, 14:54

      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);
      
      J Online
      J Online
      JonB
      wrote on 14 Jan 2022, 15:41 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.

      B 1 Reply Last reply 14 Jan 2022, 16:35
      3
      • J JonB
        14 Jan 2022, 15:41

        @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.

        B Offline
        B Offline
        BDC_Patrick
        wrote on 14 Jan 2022, 16:35 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

        3/3

        14 Jan 2022, 16:35

        • Login

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