Класс QSignalSpy
Класс QSignalSpy позволяет проводить интроспекцию выдачи сигнала. Подробнее...
| Заголовок: | #include <QSignalSpy> |
| qmake: | QT += testlib |
| Наследует: | QObject и QList |
Открытые функции
| QSignalSpy(const QObject *object, const char *signal) | |
| QSignalSpy(const QObject *object, PointerToMemberFunction signal) | |
| bool | isValid() const |
| QByteArray | signal() const |
| bool | wait(int timeout = 5000) |
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследован от QObject
- 2 сигнала унаследованы от QObject
- 11 статических открытых членов унаследованы от QObject
- 3 статических открытых члена унаследованы от QList
- 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.9/qsignalspy.html