Использование

void emit ( string $signalSignature, Array $args )

Функция emit() вырабатывает сигнал объекта с указанными значениями в качестве аргументов. Сигнатура сигнала должна быть инициализирована в приватном (private) свойстве $signals. Это свойство является одномерным массивом.

Объект, испускающий сигнал, должен быть унаследован от любого QObject (QWidgetQPushButton и д.р.). Вызов функции emit() не из наследника QObject приведёт к закрытию приложения с ошибкой.

Сигнатура сигнала является регистрозависимой и записывается без пробелов, например: "mySignal(int,bool,string)". Поддерживаются 6 типов передаваемых аргументов: Array, Object, string, int, double и bool.

Пример инициализации и выработки произвольного сигнала без передачи аргументов loaded():

class MyObject extends QObject {
    private $signals = [
        "loaded()"
    ];

    public function __construct() {
        parent::__construct();
        /* какой-то код */

        $args = [];
        emit("loaded()", $args);
    }
}

Пример инициализации и выработки произвольного сигнала с передачей одного аругмента loaded(bool):

class MyObject extends QObject {
    private $signals = [
        "loaded(bool)"
    ];

    public function __construct() {
        parent::__construct();
        /* какой-то код */

        emit("loaded(bool)", [ true ]);
    }
}

Развёрнутый пример:

class MyObject extends QObject {
    private $signals = [
        "loading()",
        "loaded(string)"
    ];

    public function __construct() {
        parent::__construct();

        emit("loading()", []);

        /* какой-то код */

        emit("loaded(string)", [ "Success" ]);
    }
}

class Window extends QWidget {
    private $myObject;

    public function __construct() {
        parent::__construct();

        $this->myObject = new MyObject();
        connect($this->myObject, SIGNAL('loaded(string)'),
                $this, SLOT('loadedSlot(string)'));
    }

    public function loadedSlot($sender, $result) {
        QMessageBox::information($this, "Заголовок", 
            "Сообщение: " . $result);
    };
}
comments powered by HyperComments