class MyTestA : public QObject
{
Q_OBJECT
public:
};
class MyTestB : public QObject
{
public:
MyTestB(QObject *parent):QObject(parent)
{
}
};
extern MyTestB *g_pMyTestB;
extern MyTestA *g_pMyTestA;
class MyTestC : public QThread
{
Q_OBJECT
public:
MyTestC():QThread(NULL)
{
}
void run()
{
exec();
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyTestA a;
MyTestB b(&a);
MyTestC c;
c.start();
a.moveToThread(&c);
if(a.thread() == b.thread() && a.thread()!=app.thread())
{
qDebug()<< "Both parent and son have the same thread";
}
return app.exec();
}
class MyTestA : public QObject
{
Q_OBJECT
public:
};
class MyTestB : public QObject
{
public:
MyTestB(QObject *parent):QObject(parent)
{
}
};
extern MyTestB *g_pMyTestB;
extern MyTestA *g_pMyTestA;
class MyTestC : public QThread
{
Q_OBJECT
public:
MyTestC():QThread(NULL)
{
}
void run()
{
g_pMyTestA->moveToThread(this);
exec();
}
};
MyTestB *g_pMyTestB = NULL;
MyTestA *g_pMyTestA = NULL;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyTestA a;
g_pMyTestA = &a;
MyTestB b(&a);
MyTestC c;
c.start();
return app.exec();
}
Cannot move to target thread (0x2ff944)"
class MyTestA : public QObject
{
Q_OBJECT
public:
};
class MyTestB : public QObject
{
public:
MyTestB(QObject *parent):QObject(parent)
{
}
};
extern MyTestB *g_pMyTestB;
extern MyTestA *g_pMyTestA;
class MyTestC : public QThread
{
Q_OBJECT
public:
MyTestC(QObject *parent):QThread(parent)
{
}
};
class MyTest : public QDialog
{
Q_OBJECT
public:
MyTest(QWidget *parent = 0, Qt::WFlags flags = 0);
~MyTest();
protected slots:
void onClick();
private:
Ui::MyTestClass ui;
};
/////////////////////////////////////////
MyTest::MyTest(QWidget *parent, Qt::WFlags flags)
: QDialog(parent, flags)
{
ui.setupUi(this);
//set the window to be the top window
this->setWindowFlags(windowFlags()|Qt::WindowStaysOnTopHint);
}
MyTest::~MyTest()
{
}
void MyTest::onClick()
{
QMessageBox box(this);
box.setText("i am at the top");
box.exec();
}
//////////////////main.cpp///////////////////////
MyTestB *g_pMyTestB = NULL;
MyTestA *g_pMyTestA = NULL;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyTestA a;
MyTestB *pB = new MyTestB(&a);
pB->setObjectName("MyTestB");
MyTestC *pC = new MyTestC(&a);
pC->setObjectName("MyTestC");
pC = new MyTestC(&a);
pC->setObjectName("MyTestC1");
QList
list = a.findChildren (); QList
::iterator it; qDebug()<<"All the son list: "<<"rn";
for(it = list.begin(); it != list.end() ; it++)
{
qDebug()<<(*it)->objectName()<<"rn";
}
qDebug()<<"============================"<<"rn";
QList
listC = a.findChildren (); QList
::iterator itC; qDebug()<<"MyTestC list: "<<"rn";
for(itC = listC.begin(); itC != listC.end() ; itC++)
{
qDebug()<<(*itC)->objectName()<<"rn";
}
qDebug()<<"============================"<<"rn";
MyTestC *pC1 = a.findChild
("MyTestC1"); if(pC1)
{
qDebug()<<"MyTestC1 has been found"<<"rn";
}
MyTest win;
win.show();
return app.exec();
}
QObject::~QObject()
{
. . . . . .
if (!d->children.isEmpty())
d->deleteChildren();
. . . . . .
}
void QObjectPrivate::deleteChildren()
{
const bool reallyWasDeleted = wasDeleted;
wasDeleted = true;
// delete children objects
// don't use qDeleteAll as the destructor of the child might
// delete siblings
for (int i = 0; i < children.count(); ++i) {
currentChildBeingDeleted = children.at(i);
children[i] = 0;
delete currentChildBeingDeleted;
}
children.clear();
currentChildBeingDeleted = 0;
wasDeleted = reallyWasDeleted;
}
class MyTestA : public QObject
{
Q_OBJECT
public:
};
class MyTestB : public QObject
{
public:
MyTestB(QObject *parent):QObject(parent)
{
}
};
extern MyTestB *g_pMyTestB;
extern MyTestA *g_pMyTestA;
class MyTestC : public QThread
{
Q_OBJECT
public:
MyTestC():QThread(NULL)
{
}
void run()
{
exec();
}
};
MyTestB *g_pMyTestB = NULL;
MyTestA *g_pMyTestA = NULL;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyTestA a;
MyTestB b(&a);
MyTestC c;
c.start();
b.moveToThread(&c);
return app.exec();
}
class MyTestA : public QObject
{
Q_OBJECT
public:
};
class MyTestB : public QObject
{
public:
MyTestB(QObject *parent):QObject(parent)
{
}
};
extern MyTestB *g_pMyTestB;
extern MyTestA *g_pMyTestA;
class MyTestC : public QThread
{
Q_OBJECT
public:
MyTestC():QThread(NULL)
{
}
void run()
{
exec();
}
};
MyTestB *g_pMyTestB = NULL;
MyTestA *g_pMyTestA = NULL;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyTestA *pA = new MyTestA;
MyTestB *pB = new MyTestB(pA);
delete pA;
delete pB;
}
原文始发于微信公众号(汇编语言):论父对象与子对象的关系
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论