TD: fix possible crash in QGIWeldSymbol::customBoundingRect()

Forum thread: https://forum.freecad.org/viewtopic.php?t=80203
This commit is contained in:
wmayer
2023-08-09 12:15:59 +02:00
committed by WandererFan
parent c664cbc941
commit a4e8ed4217
2 changed files with 19 additions and 7 deletions

View File

@@ -58,6 +58,9 @@ QGIWeldSymbol::QGIWeldSymbol(QGILeaderLine* myParent) :
m_arrowFeat(nullptr),
m_otherFeat(nullptr),
m_qgLead(myParent),
m_tailText(nullptr),
m_fieldFlag(nullptr),
m_allAround(nullptr),
m_blockDraw(false)
{
setFiltersChildEvents(true); //qt5
@@ -503,16 +506,24 @@ QRectF QGIWeldSymbol::customBoundingRect() const
{
QRectF result;
QRectF childRect = mapFromItem(m_tailText, m_tailText->boundingRect()).boundingRect();
result = result.united(childRect);
childRect = mapFromItem(m_fieldFlag, m_fieldFlag->boundingRect()).boundingRect();
result = result.united(childRect);
childRect = mapFromItem(m_allAround, m_allAround->boundingRect()).boundingRect();
result = result.united(childRect);
if (m_tailText) {
QRectF childRect = mapFromItem(m_tailText, m_tailText->boundingRect()).boundingRect();
result = result.united(childRect);
}
if (m_fieldFlag) {
QRectF childRect = mapFromItem(m_fieldFlag, m_fieldFlag->boundingRect()).boundingRect();
result = result.united(childRect);
}
if (m_allAround) {
QRectF childRect = mapFromItem(m_allAround, m_allAround->boundingRect()).boundingRect();
result = result.united(childRect);
}
std::vector<QGITile*> qgTiles = getQGITiles();
for (auto& t: qgTiles) {
childRect = mapFromItem(t, t->boundingRect()).boundingRect();
QRectF childRect = mapFromItem(t, t->boundingRect()).boundingRect();
result = result.united(childRect);
}
return result;

View File

@@ -41,6 +41,7 @@ class Document;
namespace TechDraw {
class DrawWeldSymbol;
class DrawLeaderLine;
class DrawTileWeld;
class DrawView;
}