Класс 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::QString); 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/archives/qt-5.6/qsignalspy.html