qml pyside и переключатели - PullRequest
       24

qml pyside и переключатели

1 голос
/ 06 сентября 2011

Я кодирую свое приложение 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 Я думаю, что это только часть использования pyside с qml, который поток пользовательского интерфейса блокирует при обработке функций python.

1 Ответ

0 голосов
/ 06 сентября 2011

Я немного смущен вашим кодом (а коммутатор отсутствует), поэтому я могу только догадываться.

Вызов start () в компоненте Text кажется мне неправильным. Это должно быть только

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

Текст больше не нужно задавать явно, и переключатель должен запускать сигнал вашего компонента.

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

Это просто догадка с моим пониманием вашего кода.

...