Ok, no time to attach:
childobject.cpp
#include "childObject.h"
{
setObjectName( "Atom" );
isSelected = false;
}
Atom::~Atom()
{}
void Atom::deleteSelected()
{
if( isSelected )
delete this;
}
void Atom::setSelected( bool flag )
{
isSelected = flag;
}
{
setObjectName( "Bond" );
isSelected = false;
}
Bond::~Bond()
{
emit beingDeleted(this);
}
void Bond::setSelected( bool flag )
{
isSelected = flag;
}
bool Bond::selected()
{
return isSelected;
}
void Bond::deleteSelected()
{
if( isSelected )
{
delete this;
}
}
{
setObjectName( "Ring" );
isSelected = false;
}
Ring::~Ring()
{}
void Ring::setSelected( bool flag )
{
isSelected = flag;
}
bool Ring::selected()
{
return isSelected;
}
void Ring::deleteSelected()
{
if( isSelected )
{
delete this;
}
}
void Ring::addBond(Bond * b)
{
connect( b,
SIGNAL(beingDeleted
(QObject *)),
this,
SLOT(childBeingDeleted
(QObject *)) );
}
void Ring
::childBeingDeleted(QObject *) {
/*delete this;*/
}
#include "childObject.h"
Atom::Atom(QObject *parent)
:QObject(parent)
{
setObjectName( "Atom" );
isSelected = false;
}
Atom::~Atom()
{}
void Atom::deleteSelected()
{
if( isSelected )
delete this;
}
void Atom::setSelected( bool flag )
{
isSelected = flag;
}
Bond::Bond(QObject *parent)
:QObject(parent)
{
setObjectName( "Bond" );
isSelected = false;
}
Bond::~Bond()
{
emit beingDeleted(this);
}
void Bond::setSelected( bool flag )
{
isSelected = flag;
}
bool Bond::selected()
{
return isSelected;
}
void Bond::deleteSelected()
{
if( isSelected )
{
delete this;
}
}
Ring::Ring(QObject *parent)
:QObject(parent)
{
setObjectName( "Ring" );
isSelected = false;
}
Ring::~Ring()
{}
void Ring::setSelected( bool flag )
{
isSelected = flag;
}
bool Ring::selected()
{
return isSelected;
}
void Ring::deleteSelected()
{
if( isSelected )
{
delete this;
}
}
void Ring::addBond(Bond * b)
{
connect( b, SIGNAL(beingDeleted(QObject *)),
this, SLOT(childBeingDeleted(QObject *)) );
}
void Ring::childBeingDeleted(QObject *)
{
/*delete this;*/
}
To copy to clipboard, switch view to plain text mode
parentobject.cpp
#include "parentobject.h"
#include "childObject.h"
#include <qobject>
Molecule
::Molecule(QObject *parent
){
isSelected = false;
_ring = 0;
}
Molecule::~Molecule()
{
if( isSelected ){
isSelected = false;
}
}
void Molecule::createRing( Bond* b)
{
if( !_ring )
{
_ring = new Ring( this );
}
_ring->addBond(b);
}
void Molecule::deleteSelected()
{
if( isSelected ){
delete this;
return;
}
QList<QObject*> list;
list = children();
foreach( obj, children() )
{
if( obj )
{
qDebug( obj->objectName().toAscii().constData() );
if( obj
->objectName
() == QString("Bond") ) {
bool sel = ((Bond*)obj)->selected();
if( sel )
{
list.removeAll( obj );
((Bond*)obj)->deleteSelected();
obj = NULL;
}
}
}
}
}
#include "parentobject.h"
#include "childObject.h"
#include <qobject>
Molecule::Molecule(QObject *parent)
: QObject(parent)
{
isSelected = false;
_ring = 0;
}
Molecule::~Molecule()
{
if( isSelected ){
isSelected = false;
}
}
void Molecule::createRing( Bond* b)
{
if( !_ring )
{
_ring = new Ring( this );
}
_ring->addBond(b);
}
void Molecule::deleteSelected()
{
if( isSelected ){
delete this;
return;
}
QList<QObject*> list;
QObject *obj;
list = children();
foreach( obj, children() )
{
if( obj )
{
qDebug( obj->objectName().toAscii().constData() );
if( obj->objectName() == QString("Bond") )
{
bool sel = ((Bond*)obj)->selected();
if( sel )
{
list.removeAll( obj );
((Bond*)obj)->deleteSelected();
obj = NULL;
}
}
}
}
}
To copy to clipboard, switch view to plain text mode
You had several problem there, so I corrected them:
- a QObject automatically deletes its children, so no need to connect and delete the Ring
- QObjectList and QObjectListIt were replaced ( by me
).
- I added a selected() function. It just returns is selected.
Note: I'm surprised this worked in Qt3
EDIT: some of the code I posted might be redundant. So feel free to remove those parts.
Regards
Bookmarks