QQmlProperty :: write не работает должным образом - PullRequest
0 голосов
/ 20 июня 2019

Я новичок в Qt. Я пытаюсь включить и отключить изображение из главного окна с задержкой в ​​2 секунды, но оно всегда принимает последнее свойство, которое я устанавливаю. Пожалуйста, найдите мой пример кода ниже. Я ожидаю, чтобы быть включить-> отключить-> включить-> отключить-> включить. но он включается только с задержкой.

Я пытался использовать все свойства.

int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
    return -1;
QObject *object = engine.rootObjects().first();

QObject *test= object->findChild<QObject*>("image");

if(test)
{
    QThread::msleep(2000);

    QQmlProperty::write(test, "visible", "false");
    added delay;

    QQmlProperty::write(test, "visible", "true");
    added delay;

    QQmlProperty::write(test, "visible", "false");
    added delay;

    QQmlProperty::write(test, "visible", "true");
}
return app.exec();
}

1 Ответ

0 голосов
/ 21 июня 2019

Нет QThread до запуска цикла событий QApplication (обычно с exec () ). Таким образом, нет остановки, как вы ожидаете. Кроме того, я почти уверен, что QQmlApplicationEngine ничего не отобразит, пока не начнется основной цикл приложения.

Вам необходимо внести изменения в свойстве либо в main.qml (в коде QML), либо создать какой-то постоянный объект C ++, который выполняет изменения после запуска основного цикла событий, из цикла.

Также обратите внимание, что QThread::msleep() из основного потока заморозит весь графический интерфейс. Использование таймера может быть более уместным, если, например, вы хотите, чтобы пользователь мог постоянно взаимодействовать с приложением или выходить из него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...