Класс QSignalSpy
Класс QSignalSpy позволяет инспектировать излучение сигналов. Подробнее...
| Заголовок: | #include <QSignalSpy> |
| qmake: | QT += testlib |
| Наследуется от: | QObject и QList |
Открытые функции
| QSignalSpy(const QObject *object, PointerToMemberFunction signal) | |
| QSignalSpy(const QObject *object, const char *signal) | |
| bool | isValid() const |
| QByteArray | signal() const |
| bool | wait(int timeout = 5000) |
Подробное описание
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, PointerToMemberFunction signal)
Конструирует новый QSignalSpy, который прослушивает излучения сигнала signal от объекта QObject object. Если QSignalSpy не может прослушивать действительный сигнал (например, потому что object является nullptr или signal не обозначает допустимый сигнал для object), будет выведено информационное сообщение с объяснением с помощью qWarning(), а последующие вызовы isValid() будут возвращать false.
Пример:
QSignalSpy spy(myPushButton, &QPushButton::clicked);
Эта функция была введена в Qt 5.4.
QSignalSpy::QSignalSpy(const QObject *object, const char *signal)
Конструирует новый QSignalSpy, который прослушивает излучения сигнала signal от объекта QObject object. Если QSignalSpy не может прослушивать действительный сигнал (например, потому что object является nullptr или signal не обозначает допустимый сигнал для object), будет выведено информационное сообщение с объяснением с помощью qWarning(), а последующие вызовы isValid() будут возвращать false.
Пример:
QSignalSpy spy(myPushButton, SIGNAL(clicked(bool)));
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.13/qsignalspy.html