gpt4 book ai didi

c++ - QML 应用程序 block

转载 作者:行者123 更新时间:2023-12-01 14:25:39 26 4
gpt4 key购买 nike

以下 QML 小应用程序在运行时永远阻塞(Qt 5.14.2,Windows 10)。我的想法是创建一个包含业务逻辑的通用 App 并在其之上放置一个 QtUI。当我删除 QML 中的 Scene3D 时,阻塞不会发生,所以我认为这个问题在某种程度上与 Qt3D 有关。我卡住了,我做错了什么?

主要.cpp:

#include "QtUI.h"

int main(int argc, char** argv) {
App app;
QtUI gui(app, argc, argv);
app.setUI(&gui);
app.init();
QtUI::exec();
}

应用.h:

#ifndef APP_H
#define APP_H

class App {
public:
class UI {
public:
virtual void onFirst() = 0;
virtual void onSecond() = 0;
};
void setUI(UI* ui);
void init();

private:
UI* ui_ = nullptr;
};

#endif

应用程序.cpp:

#include "App.h"

void App::init() {
ui_->onFirst();
ui_->onSecond();
}


void App::setUI(App::UI* ui) {
ui_ = ui;
}

QtUI.h:

#ifndef QTUI_H
#define QTUI_H

#include <QApplication>
#include <QQmlApplicationEngine>
#include "App.h"

class QtUI : public QGuiApplication, public App::UI {
Q_OBJECT
public:
explicit QtUI(App& app, int& argc, char** argv);
void onFirst() override;
void onSecond() override;

signals:
void first();
void second();

private:
App& app_;
QQmlApplicationEngine engine_;
};

#endif

QtUI.cpp

#include "QtUI.h"
#include <QQmlContext>

QtUI::QtUI(App& app, int& argc, char** argv)
: QGuiApplication(argc, argv),
app_(app) {
engine_.rootContext()->setContextProperty("app", this);
engine_.load("qrc:/Main.qml");
}

void QtUI::onFirst() {
emit first();
}

void QtUI::onSecond() {
emit second();
}

主.qml

import QtQuick 2.14
import QtQuick.Controls 2.14
import QtQuick.Window 2.14
import QtQuick.Scene3D 2.14
import Qt3D.Core 2.14
import Qt3D.Render 2.14
import Qt3D.Input 2.14
import Qt3D.Extras 2.14

ApplicationWindow {
visible: true

StackView {
id: stack
anchors.fill: parent
}

Connections {
target: app
onFirst: stack.push(first);
onSecond: stack.push(second);
}

Component {
id: first
Item {
Scene3D {
Entity {
components: [
RenderSettings {
activeFrameGraph: ForwardRenderer {
clearColor: "red"
}
}
]
}
}
}
}

Component {
id: second
Item {
Button{ text: "Foo"}
}
}
}

最佳答案

我使用 StackView 的 replace 方法作为解决方法。

关于c++ - QML 应用程序 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61467677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com