Spec-Zone.ru › Qt 5.13

Класс 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

Spec-Zone.ru

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