Сигнали і слоти в Qt: установка, особливості роботи, створення

Створення власних сигналів і слотів

Користувачам не потрібно покладатися виключно на сигнали, що подаються віджетами, можна створити Qt сигнал з використанням класу Signal:

• from PySide.QtCore import Signal;

• tapped = Signal().

Потім, коли умови для об’єкта, до якого підключаються задовольняються, викликають метод сигналу, і він випромінюється, викликаючи будь Qt слоти, до яких він підключений: thing.tapped.emit().

Це добре з двох причин, по-перше, він дозволяє користувачам об’єктів взаємодіяти з об’єктами знайомими способами. По-друге, він дозволяє більш гнучко використовувати їх, залишаючи ефекти визначення дій над ними для використовує коду.

Простий приклад генерації

Можна визначити простий PunchingBag клас, який робить тільки одне, коли він «punch» викликається, то генерує punched сигнал.

У Punching Bag успадкований від ознака QObject так, що може випромінювати сигнали, у нього є викликаний сигнал punched, який не несе ніяких даних і punch метод, який робить тільки випромінювання punched сигналу Qt. Щоб зробити Punching Bag корисним, потрібно підключити його punched сигнал до слоту. Визначають просту функцію, яка друкує на консолі, створюють примірник Punching Bag і підключають його punched сигнал до слоту.

Якщо помістіть все це скрипт і запустіть його, він забезпечить реалізацію реакції на перфорацію використовує коду.

Одна з найбільш цікавих речей, які можна зробити при використанні Qt creator – створення сигналів, щоб змусити їх переносити дані. Наприклад, можна змусити сигнал нести ціле число, таким чином:

  • 1 updated = Signal(int);
  • 1 updated = Signal(str).

Тип даних може бути будь-яким ім’ям типу Python або рядок, що ідентифікує тип даних C ++.