mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-06 01:05:23 +08:00
qt 6.5.1 original
This commit is contained in:
20
tests/auto/corelib/kernel/qobject/CMakeLists.txt
Normal file
20
tests/auto/corelib/kernel/qobject/CMakeLists.txt
Normal file
@ -0,0 +1,20 @@
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#####################################################################
|
||||
## tst_qobject Test:
|
||||
#####################################################################
|
||||
|
||||
qt_internal_add_test(tst_qobject
|
||||
SOURCES
|
||||
tst_qobject.cpp
|
||||
LIBRARIES
|
||||
Qt::CorePrivate
|
||||
Qt::Network
|
||||
Qt::TestPrivate
|
||||
)
|
||||
|
||||
## Scopes:
|
||||
#####################################################################
|
||||
add_subdirectory(signalbug)
|
||||
add_dependencies(tst_qobject signalbug_helper)
|
11
tests/auto/corelib/kernel/qobject/signalbug/CMakeLists.txt
Normal file
11
tests/auto/corelib/kernel/qobject/signalbug/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#####################################################################
|
||||
## signalbug_helper Binary:
|
||||
#####################################################################
|
||||
|
||||
qt_internal_add_test_helper(signalbug_helper
|
||||
SOURCES
|
||||
signalbug.cpp signalbug.h
|
||||
)
|
109
tests/auto/corelib/kernel/qobject/signalbug/signalbug.cpp
Normal file
109
tests/auto/corelib/kernel/qobject/signalbug/signalbug.cpp
Normal file
@ -0,0 +1,109 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#include "signalbug.h"
|
||||
|
||||
#include <qcoreapplication.h>
|
||||
#include <qstring.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
static int Step = 0;
|
||||
Sender RandomSender (0, 0);
|
||||
|
||||
void TRACE (int step, const char *name)
|
||||
{
|
||||
for (int t = 0; t < step - 1; t++)
|
||||
fprintf (stderr, "\t");
|
||||
fprintf (stderr, "Step %d: %s\n", step, name);
|
||||
return;
|
||||
}
|
||||
|
||||
Receiver::Receiver ()
|
||||
: QObject ()
|
||||
{
|
||||
}
|
||||
|
||||
void Receiver::received ()
|
||||
{
|
||||
::Step++;
|
||||
const int stepCopy = ::Step;
|
||||
TRACE (stepCopy, "Receiver::received()");
|
||||
if (::Step != 2 && ::Step != 4)
|
||||
qFatal("%s: Incorrect Step: %d (should be 2 or 4)", Q_FUNC_INFO, ::Step);
|
||||
|
||||
if (::Step == 2)
|
||||
s->fire ();
|
||||
|
||||
fprintf (stderr, "Receiver<%s>::received() sender=%s\n",
|
||||
(const char *) objectName ().toLatin1 (), sender ()->metaObject()->className());
|
||||
|
||||
TRACE (stepCopy, "ends Receiver::received()");
|
||||
}
|
||||
|
||||
Disconnector::Disconnector ()
|
||||
: QObject ()
|
||||
{
|
||||
}
|
||||
|
||||
void Disconnector::received ()
|
||||
{
|
||||
::Step++;
|
||||
const int stepCopy = ::Step;
|
||||
TRACE (stepCopy, "Disconnector::received()");
|
||||
if (::Step != 5 && ::Step != 6)
|
||||
qFatal("%s: Incorrect Step: %d (should be 5 or 6)", Q_FUNC_INFO, ::Step);
|
||||
|
||||
fprintf (stderr, "Disconnector<%s>::received() sender=%s\n",
|
||||
(const char *) objectName ().toLatin1 (), sender ()->metaObject()->className());
|
||||
if (sender () == 0)
|
||||
fprintf (stderr, "WE SHOULD NOT BE RECEIVING THIS SIGNAL\n");
|
||||
|
||||
if (::Step == 5)
|
||||
{
|
||||
disconnect (s, SIGNAL(fired()), s->d, SLOT(received()));
|
||||
|
||||
connect (&RandomSender, SIGNAL(fired()), s->d, SLOT(received()));
|
||||
}
|
||||
|
||||
TRACE (stepCopy, "ends Disconnector::received()");
|
||||
}
|
||||
|
||||
|
||||
Sender::Sender (Receiver *r, Disconnector *d)
|
||||
: QObject ()
|
||||
{
|
||||
this->r = r; this->d = d;
|
||||
if (r)
|
||||
connect (this, SIGNAL(fired()), r, SLOT(received()));
|
||||
if (d)
|
||||
connect (this, SIGNAL(fired()), d, SLOT(received()));
|
||||
};
|
||||
|
||||
void Sender::fire ()
|
||||
{
|
||||
::Step++;
|
||||
const int stepCopy = ::Step;
|
||||
TRACE (stepCopy, "Sender::fire()");
|
||||
if (::Step != 1 && ::Step != 3)
|
||||
qFatal("%s: Incorrect Step: %d (should be 1 or 3)", Q_FUNC_INFO, ::Step);
|
||||
|
||||
emit fired ();
|
||||
TRACE (stepCopy, "ends Sender::fire()");
|
||||
}
|
||||
|
||||
int main (int argc, char *argv [])
|
||||
{
|
||||
QCoreApplication app (argc, argv);
|
||||
|
||||
Receiver r;
|
||||
Disconnector d;
|
||||
Sender s (&r, &d);
|
||||
|
||||
r.s = &s;
|
||||
d.s = &s;
|
||||
|
||||
::Step = 0;
|
||||
s.fire ();
|
||||
return 0;
|
||||
}
|
62
tests/auto/corelib/kernel/qobject/signalbug/signalbug.h
Normal file
62
tests/auto/corelib/kernel/qobject/signalbug/signalbug.h
Normal file
@ -0,0 +1,62 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#ifndef SIGNAL_BUG_H
|
||||
#define SIGNAL_BUG_H
|
||||
|
||||
|
||||
#include <QObject>
|
||||
|
||||
|
||||
class Sender;
|
||||
|
||||
|
||||
class Receiver : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Receiver ();
|
||||
virtual ~Receiver () {}
|
||||
|
||||
protected slots:
|
||||
void received ();
|
||||
|
||||
public:
|
||||
Sender *s;
|
||||
};
|
||||
|
||||
class Disconnector : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Disconnector ();
|
||||
virtual ~Disconnector () {}
|
||||
|
||||
protected slots:
|
||||
void received ();
|
||||
|
||||
public:
|
||||
Sender *s;
|
||||
};
|
||||
|
||||
class Sender : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Sender (Receiver *r, Disconnector *d);
|
||||
virtual ~Sender () {}
|
||||
|
||||
void fire ();
|
||||
|
||||
signals:
|
||||
void fired ();
|
||||
|
||||
public:
|
||||
Receiver *r;
|
||||
Disconnector *d;
|
||||
};
|
||||
|
||||
#endif // SIGNAL_BUG_H
|
8359
tests/auto/corelib/kernel/qobject/tst_qobject.cpp
Normal file
8359
tests/auto/corelib/kernel/qobject/tst_qobject.cpp
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user