Spec-Zone.ru › Qt 5.9

Класс 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)
  • 32 открытых функции унаследованы от QObject
  • 78 открытых функций унаследованы от QList

Дополнительные унаследованные члены

  • 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API