Каскадный сигнал не работает

У меня есть лист, объявленный в моем файле QML, который имеет идентификатор "заставка"

Когда мое приложение выполняет задачу, требующую больших вычислительных ресурсов, я испускаю сигнал working().

У меня есть этот код, прикрепленный к основному элементу моего файла QML:

onCreationCompleted: {
    _encryptedattachment.finished.connect(splashscreen.close);
    _encryptedattachment.working.connect(splashscreen.open);
    console.log("connected");
}

Если я открою приложение через вызов файла, который необходимо расшифровать,

    _encryptedattachment.working.connect(splashscreen.open);

не открывает заставку, хотя событие срабатывает (проверил в отладчике, что код

emit working()

выполняется.

РЕДАКТИРОВАТЬ:

Я изменил код onCreated на это:

onCreationCompleted: {
    splashscreen.open();
    _encryptedattachment.working.connect(showSplash);
    _encryptedattachment.finished.connect(hideSplash);
    console.log("connected");
}
function showSplash() {
    console.log("open splashscreen");
    splashscreen.open();
}
function hideSplash() {
    console.log("close splashscreen");
    splashscreen.close();
}

и оба эти журнала появляются в консоли.


person Tom Macdonald    schedule 13.07.2013    source источник
comment
1. Вы уверены, что _encryptedattachment.working.connect(showSplash); вернул истину? вы уверены, что showSplash не называется? Если вызывается showSplash, вызываете ли вы QApplication::processEvents после вызова show на экземпляре QSplashScreen?   -  person Kamil Klimek    schedule 15.07.2013
comment
QApplication::processEvents решил проблему. Спасибо. Если вы добавите это как ответ, я приму это.   -  person Tom Macdonald    schedule 15.07.2013


Ответы (1)


После вызова QSplashScreen::show() вы должны вызвать QApplication::processEvents(), чтобы цикл обработки событий отобразил его на экране. Не забывайте вызывать QApplication::processEvents() после каждого обновления заставки.

person Kamil Klimek    schedule 15.07.2013