QML API (escape hatch)
QML не обязателен. Продвинутые пользователи могут указать
"ui": "ui/main.qml" и использовать полный QML API ниже; Store и
capabilities те же.
import Pulsar 1.0 // синглтоны Pulsar и Store
import Pulsar 1.0 // синглтоны Pulsar и Store
Pulsar
| Метод | Описание |
|---|---|
Pulsar.emit(name, params) |
Послать событие в приложение (app.on(name, ...)). |
Pulsar.call(name, params) |
Вызвать событие/capability; возвращает Promise (напр. Pulsar.call("fs.exists", { path: "." }).then(...)). |
Pulsar.openFile(title, filter, dir) |
Нативный диалог открытия; возвращает путь (синхронно). |
Pulsar.saveFile(title, filter, dir) |
Нативный диалог сохранения; возвращает путь. |
Pulsar.message(title, text) |
Нативное окно сообщения. |
Pulsar.clipboardText() / Pulsar.clipboardWrite(text) |
Буфер обмена. |
Pulsar.trayAvailable() |
Доступен ли системный трей. |
Pulsar.setTrayIcon(path) / Pulsar.setTrayTooltip(text) / Pulsar.setTrayMenu(items) / Pulsar.hideTray() |
Управление треем. |
Pulsar.diagnostics() |
Отладочная строка. |
Pulsar.restart() |
Перезапустить бэкенд (dev). |
Сигналы: log(level, message, source), appEvent(event, payload, target) и
colorSchemeChanged — подписка через Connections. Каждое окно также получает
контекстное свойство PulsarWindowLabel со своей меткой. Свойство
Pulsar.colorScheme равно "light"/"dark".
Store
Store.<key> реактивно отражает каждое значение app.store:
Label { text: "Count: " + (Store.count ?? 0) }
Grid { model: Store.photos; delegate: Image { required property var modelData; source: modelData.url } }
Несколько окон
// main.ts
app.on("togglePanel", async () => {
const open = app.store.get("panelOpen") as boolean
const panel = app.window("panel")
await (open ? panel.hide() : panel.show())
app.store.set("panelOpen", !open)
})
// panel.qml
Button {
text: "Close me"
onClicked: Pulsar.call("window", { label: "panel", action: "close" })
}