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. Is it safe to overwritten a widget value right after calling deleteLater?
Forum Updated to NodeBB v4.3 + New Features

Is it safe to overwritten a widget value right after calling deleteLater?

Scheduled Pinned Locked Moved Unsolved General and Desktop
2 Posts 2 Posters 176 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.
  • R Offline
    R Offline
    Roberrt
    wrote on last edited by
    #1

    When i call shadow_map[widget].eff->deleteLater(); and in the next line overwrite the value
    of the eff into the shadow_map, does it still will get deleted as its value got overwritten?

        struct Shadow
        {
    		GraphicsEffect* eff = nullptr;
          //...
        };
    
    
    	QMap<QWidget*, Shadow> shadow_map;
    
    	void setShadow(Shadow& shadow, QWidget* widget = nullptr)
    	{
    		if (widget)
    			shadow.widget = widget;
    		else
    			widget = shadow.widget;
    
    		GraphicsEffect* eff = new GraphicsEffect(...);
    
    		shadow.eff = eff;
    
    		if (shadow_map.contains(widget))
    		{
    			shadow_map[widget].eff->deleteLater();
    			shadow_map[widget] = shadow;
    		}
       }
    Christian EhrlicherC 1 Reply Last reply
    0
    • R Roberrt

      When i call shadow_map[widget].eff->deleteLater(); and in the next line overwrite the value
      of the eff into the shadow_map, does it still will get deleted as its value got overwritten?

          struct Shadow
          {
      		GraphicsEffect* eff = nullptr;
            //...
          };
      
      
      	QMap<QWidget*, Shadow> shadow_map;
      
      	void setShadow(Shadow& shadow, QWidget* widget = nullptr)
      	{
      		if (widget)
      			shadow.widget = widget;
      		else
      			widget = shadow.widget;
      
      		GraphicsEffect* eff = new GraphicsEffect(...);
      
      		shadow.eff = eff;
      
      		if (shadow_map.contains(widget))
      		{
      			shadow_map[widget].eff->deleteLater();
      			shadow_map[widget] = shadow;
      		}
         }
      Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #2

      You don't override the value, just a pointer so you don't modify the object deleteLater() was called upon.

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      1 Reply Last reply
      1

      • Login

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