filcuc / nimqml

Qt Qml bindings for the Nim programming language
Other
164 stars 20 forks source link

QtProperty->notify don't fire on TextField text changed #20

Closed R3D9477 closed 6 years ago

R3D9477 commented 6 years ago

Hi. How to fire event QtProperty->notify after text of TextField was changed?

mainWindow.qml:

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.3

Window {
    visible: true
    width: 250
    height: 105
    title: qsTr("Main Window")

    TextField {
        id: textField
        x: 10
        y: 12
        width: 232
        height: 40
        text: mainWindow.messageText
    }
}

mainWindow.nim:

import nimqml, windowHandler

QtObject:
  type MainWindowHandler* = ref object of WindowHandler
    messageText: string

  proc messageTextChanged(self: MainWindowHandler, messageText: string) {.signal.}

  proc setMessageText(self: MainWindowHandler, messageText: string) {.slot.} =
    if self.messageText == messageText: return
    self.messageText = messageText
    messageTextChanged(self, messageText)

  proc getMessageText(self: MainWindowHandler): string {.slot.} =
    result = self.messageText

  QtProperty[string] messageText:
    read = getMessageText
    write = setMessageText
    notify = messageTextChanged
R3D9477 commented 6 years ago

solved via onTextEdited: mainWindow.messageText = textField.text