Класс QSignalSpy
Класс QSignalSpy позволяет выполнять интроспекцию излучения сигнала. Подробнее...
| Заголовок: | #include <QSignalSpy> |
| qmake: | QT += testlib |
| Наследует: | QObject |
Открытые функции
| QSignalSpy(const QObject *object, const char *signal) | |
| QSignalSpy(const QObject *object, PointerToMemberFunction signal) | |
| bool | isValid() const |
| QByteArray | signal() const |
| bool | wait(int timeout = 5000) |
- 31 открытая функция унаследована от QObject
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследован от QObject
- 2 сигнала унаследованы от QObject
- 9 статические открытые члены унаследованы от QObject
- 9 защищённых функций унаследованы от QObject
Подробное описание
Класс QSignalSpy позволяет выполнять интроспекцию излучения сигнала.
QSignalSpy может подключаться к любому сигналу любого объекта и записывать его излучение. QSignalSpy сам по себе является списком списков QVariant. Каждое излучение сигнала добавит один элемент в список, содержащий аргументы сигнала.
Следующий пример записывает все излучения сигнала clicked() для QCheckBox:
QCheckBox *box = ...; QSignalSpy spy(box, SIGNAL(clicked(bool))); // do something that triggers the signal box->animateClick(); QCOMPARE(spy.count(), 1); // make sure the signal was emitted exactly one time QList<QVariant> arguments = spy.takeFirst(); // take the first signal QVERIFY(arguments.at(0).toBool() == true); // verify the first argument
spy.takeFirst() возвращает аргументы для первого излученного сигнала в виде списка объектов QVariant. Сигнал clicked() имеет один аргумент типа bool, который хранится в качестве первого элемента в списке аргументов.
Пример ниже перехватывает сигнал от пользовательского объекта:
QSignalSpy spy(myCustomObject, SIGNAL(mySignal(int,QString,double))); myCustomObject->doSomething(); // trigger emission of the signal QList<QVariant> arguments = spy.takeFirst(); QVERIFY(arguments.at(0).type() == QVariant::Int); QVERIFY(arguments.at(1).type() == QVariant::String); QVERIFY(arguments.at(2).type() == QVariant::double);
Примечание: Нестандартные типы данных необходимо зарегистрировать, используя функцию qRegisterMetaType(), прежде чем создавать QSignalSpy. Например:
qRegisterMetaType<SomeStruct>(); QSignalSpy spy(&model, SIGNAL(whatever(SomeStruct)));
Для получения экземпляра можно использовать qvariant_cast:
// get the first argument from the first received signal: SomeStruct result = qvariant_cast<SomeStruct>(spy.at(0).at(0));
Документация по членам-функциям
QSignalSpy::QSignalSpy(const QObject *object, const char *signal)
Создаёт новый QSignalSpy, который прослушивает излучения сигнала signal от объекта QObject object. Если QSignalSpy не может прослушивать допустимый сигнал (например, потому что object равен null или signal не обозначает допустимый сигнал объекта object), будет выведено сообщение об ошибке с помощью qWarning(), и последующие вызовы isValid() будут возвращать false.
Пример:
QSignalSpy spy(myPushButton, SIGNAL(clicked(bool)));
QSignalSpy::QSignalSpy(const QObject *object, PointerToMemberFunction signal)
Создаёт новый QSignalSpy, который прослушивает излучения сигнала signal от объекта QObject object. Если QSignalSpy не может прослушивать допустимый сигнал (например, потому что object равен null или signal не обозначает допустимый сигнал объекта object), будет выведено сообщение об ошибке с помощью qWarning(), и последующие вызовы isValid() будут возвращать false.
Пример:
QSignalSpy spy(myPushButton, &QPushButton::clicked);
Эта функция была добавлена в Qt 5.4.
bool QSignalSpy::isValid() const
Возвращает true, если наблюдатель сигнала прослушивает допустимый сигнал, иначе возвращает false.
QByteArray QSignalSpy::signal() const
Возвращает нормализованный сигнал, к которому в данный момент подключен наблюдатель.
bool QSignalSpy::wait(int timeout = 5000)
Запускает цикл событий, который выполняется до тех пор, пока не будет получен указанный сигнал. При необходимости цикл событий может завершиться раньше по истечении timeout (в миллисекундах).
Возвращает true если сигнал был излучен по крайней мере один раз в течение timeout миллисекунд, иначе возвращает false.
Пример:
QVERIFY(spy.wait(1000));
Эта функция была добавлена в Qt 5.0.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qsignalspy.html