如何使C ++等待来自QML的用户输入

时间:2016-10-26 15:05:46

标签: c++ qt qml

我正在创建游戏,目前我遇到了QML问题。我需要让我的C ++线程等待用户做出决定,这将由一些QML组件(例如MouseArea)接收。为了更好地演示这个问题,我编写了一些代表我正在尝试做的简单代码:

//Scrolling sidebar
$(function() {
    var offset = $("#sidebar").offset();
    var topPadding = 15;
    $(window).scroll(function() {
        if ($(window).scrollTop() > offset.top) {
            $("#sidebar").stop().animate({
                marginTop: $(window).scrollTop() - offset.top + topPadding
            });
        } else {
            $("#sidebar").stop().animate({
                marginTop: 0
            });
        };

        if ($(window).scrollTop() > offset.top + 150) {
            $("#morecontent").fadeOut(1000);
        } else {
            $("#morecontent").fadeIn(1000);
        }

    });
});

我认为它应该显示一个红色矩形,当用户点击它时,将其颜色更改为绿色。如果我没记错,Qt GUI运行在与C ++逻辑线程不同的线程中,所以我猜它应该能够在lock()执行期间执行unlock()槽。但如果它不起作用,那么我可能完全错了。更有趣的是,矩形甚至没有显示,尽管在lock()之前调用了view.setSource(QUrl)。有人可以解释,为什么它不起作用以及如何处理这个问题?

1 个答案:

答案 0 :(得分:2)

您处于单线程应用程序中,并且您的线程执行永不结束的循环。

而不是试图循环只是记住你在事件驱动系统中。 只是对信号作出反应。

顺便说一下,避免在QML代码上创建C ++依赖项要好得多,所以不是检索根对象,连接到它的信号并调用它的函数,而是暴露C ++对象并让QML代码调用C ++逻辑。 见QQmlContext::setContextProperty(QString, QObject*)