2708 QPointer<DeleteObject> p = receiver; |
2719 QPointer<DeleteObject> p = receiver; |
2709 sender.emitSignal1(); |
2720 sender.emitSignal1(); |
2710 QVERIFY(p.isNull()); |
2721 QVERIFY(p.isNull()); |
2711 |
2722 |
2712 QVERIFY(thread.wait(10000)); |
2723 QVERIFY(thread.wait(10000)); |
|
2724 } |
|
2725 |
|
2726 { |
|
2727 EmitThread sender; |
|
2728 DeleteObject *receiver = new DeleteObject(); |
|
2729 connect(&sender, SIGNAL(work()), receiver, SLOT(deleteSelf()), Qt::DirectConnection); |
|
2730 QPointer<DeleteObject> p = receiver; |
|
2731 sender.start(); |
|
2732 QVERIFY(sender.wait(10000)); |
|
2733 QVERIFY(p.isNull()); |
2713 } |
2734 } |
2714 } |
2735 } |
2715 |
2736 |
2716 class DisconnectObject : public QObject |
2737 class DisconnectObject : public QObject |
2717 { |
2738 { |
3267 delete r1; |
3288 delete r1; |
3268 delete r2; |
3289 delete r2; |
3269 |
3290 |
3270 } |
3291 } |
3271 |
3292 |
|
3293 void tst_QObject::qMetaObjectDisconnectOne() |
|
3294 { |
|
3295 SenderObject *s = new SenderObject; |
|
3296 ReceiverObject *r1 = new ReceiverObject; |
|
3297 |
|
3298 int signal1Index = s->metaObject()->indexOfSignal("signal1()"); |
|
3299 int signal3Index = s->metaObject()->indexOfSignal("signal3()"); |
|
3300 int slot1Index = r1->metaObject()->indexOfSlot("slot1()"); |
|
3301 int slot2Index = r1->metaObject()->indexOfSlot("slot2()"); |
|
3302 |
|
3303 QVERIFY(signal1Index > 0); |
|
3304 QVERIFY(signal3Index > 0); |
|
3305 QVERIFY(slot1Index > 0); |
|
3306 QVERIFY(slot2Index > 0); |
|
3307 |
|
3308 QVERIFY( QMetaObject::connect(s, signal1Index, r1, slot1Index) ); |
|
3309 QVERIFY( QMetaObject::connect(s, signal3Index, r1, slot2Index) ); |
|
3310 QVERIFY( QMetaObject::connect(s, signal3Index, r1, slot2Index) ); |
|
3311 QVERIFY( QMetaObject::connect(s, signal3Index, r1, slot2Index) ); |
|
3312 |
|
3313 r1->reset(); |
|
3314 QCOMPARE( r1->count_slot1, 0 ); |
|
3315 QCOMPARE( r1->count_slot2, 0 ); |
|
3316 |
|
3317 s->emitSignal1(); |
|
3318 QCOMPARE( r1->count_slot1, 1 ); |
|
3319 QCOMPARE( r1->count_slot2, 0 ); |
|
3320 |
|
3321 s->emitSignal3(); |
|
3322 QCOMPARE( r1->count_slot1, 1 ); |
|
3323 QCOMPARE( r1->count_slot2, 3 ); |
|
3324 |
|
3325 r1->reset(); |
|
3326 QVERIFY( QMetaObject::disconnectOne(s, signal1Index, r1, slot1Index) ); |
|
3327 QVERIFY( QMetaObject::disconnectOne(s, signal3Index, r1, slot2Index) ); |
|
3328 |
|
3329 s->emitSignal1(); |
|
3330 QCOMPARE( r1->count_slot1, 0 ); |
|
3331 QCOMPARE( r1->count_slot2, 0 ); |
|
3332 |
|
3333 s->emitSignal3(); |
|
3334 QCOMPARE( r1->count_slot1, 0 ); |
|
3335 QCOMPARE( r1->count_slot2, 2 ); |
|
3336 |
|
3337 r1->reset(); |
|
3338 QVERIFY( false == QMetaObject::disconnectOne(s, signal1Index, r1, slot1Index) ); |
|
3339 QVERIFY( QMetaObject::disconnectOne(s, signal3Index, r1, slot2Index) ); |
|
3340 |
|
3341 s->emitSignal1(); |
|
3342 QCOMPARE( r1->count_slot1, 0 ); |
|
3343 QCOMPARE( r1->count_slot2, 0 ); |
|
3344 |
|
3345 s->emitSignal3(); |
|
3346 QCOMPARE( r1->count_slot1, 0 ); |
|
3347 QCOMPARE( r1->count_slot2, 1 ); |
|
3348 |
|
3349 r1->reset(); |
|
3350 QVERIFY( false == QMetaObject::disconnectOne(s, signal1Index, r1, slot1Index) ); |
|
3351 QVERIFY( QMetaObject::disconnectOne(s, signal3Index, r1, slot2Index) ); |
|
3352 |
|
3353 s->emitSignal1(); |
|
3354 QCOMPARE( r1->count_slot1, 0 ); |
|
3355 QCOMPARE( r1->count_slot2, 0 ); |
|
3356 |
|
3357 s->emitSignal3(); |
|
3358 QCOMPARE( r1->count_slot1, 0 ); |
|
3359 QCOMPARE( r1->count_slot2, 0 ); |
|
3360 |
|
3361 delete s; |
|
3362 delete r1; |
|
3363 } |
|
3364 |
3272 QTEST_MAIN(tst_QObject) |
3365 QTEST_MAIN(tst_QObject) |
3273 #include "tst_qobject.moc" |
3366 #include "tst_qobject.moc" |