1

アプリケーションの Groundwork をコーディングしており、pyside を使用してアプリケーションを開発しています。私が抱えている唯一の問題は、qmlスイッチをアクティブにすることです。現在、私はqmlファイルに持っています:

signal buttonClicked;
//function start(){text.text="started";buttonClicked()}
Switch {
    id:switchComponent
    anchors.verticalCenterarent.verticalCenter;
    anchors.horizontalCenterarent.horizontalCenter;
}
//end of switch

Text {
    id:text

    color:"red"
    anchors.bottom: switchComponent.top
    anchors.horizontalCenter: switchComponent.horizontalCenter
    //text: switchComponent.checked ? "GROUNDWORK ON" & start() : "Press to Start"
    //text: switchComponent.checked ? "GROUNDWORK ON" && start() : "Press to Start"
    text: switchComponent.checked ? start() : "Press to Start"
    font.pixelSize: 30
    smooth:true
}

アプリケーションが起動すると、switchedComponent を押すとシグナルが python に送信され、シグナルに接続された関数が開始されますが、スイッチが青に変わることはなく、テキストが「開始済み」に変わりません。アプリケーションが実行されていることを知る唯一の方法は、約 10 秒後にシステムがアプリケーションを閉じるように求めることです。NO を押すと、アプリは問題なく動作します。

なぜこれが起こるのか誰か知っていますか?私は基本的に、Python関数が実行を開始する前にスイッチとテキストをアクティブにして、ユーザーが何が起こっているかを知るようにしたいだけです。編集: 完全な qml ファイルはこちらにあります。https://projects.developer.nokia.com/airplay/browser/groundwork/qml/main.qml Python 関数の処理時にブロックします。

4

1 に答える 1

0

私はあなたのコードに少し混乱しているので(そしてスイッチがありません)、私は推測することしかできません。

Textコンポーネントでstart()を呼び出すのは、私には間違っているようです。それは

Text {
    ...
    text: switchComponent.checked ? "GROUNDWORK ON" : "Press to Start"
}

テキストを明示的に設定する必要はなくなり、スイッチはコンポーネントの信号をトリガーする必要があります。

Switch {
    onCheckedChanged: {
        if (checked) {
            buttonClicked()
        }
    }
}

これは、あなたのコードを理解しているだけで推測できます。

于 2011-09-06T06:56:03.737 に答える