我正在创建游戏,目前我遇到了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)。有人可以解释,为什么它不起作用以及如何处理这个问题?
答案 0 :(得分:2)
您处于单线程应用程序中,并且您的线程执行永不结束的循环。
而不是试图循环只是记住你在事件驱动系统中。 只是对信号作出反应。
顺便说一下,避免在QML代码上创建C ++依赖项要好得多,所以不是检索根对象,连接到它的信号并调用它的函数,而是暴露C ++对象并让QML代码调用C ++逻辑。 见QQmlContext::setContextProperty(QString, QObject*)