从 main 运行 Urho3D 和 Qt

Posted

技术标签:

【中文标题】从 main 运行 Urho3D 和 Qt【英文标题】:Running Urho3D and Qt from main 【发布时间】:2017-03-24 16:43:29 【问题描述】:

我在一个应用程序中使用带有 Qt 的 Urho3D 引擎。问题是 Urho3D 和 QApplication 都需要从 main() 运行。现在我在单独的进程中使用它,但 IPC 使它变得复杂。 有没有办法解决这个问题?谢谢

我的平台是 Urho3D 1.5、Qt 4.71 和 Windows 7 x64 和 VS2015 (C++)

【问题讨论】:

【参考方案1】:

我是 c++ 和 Urho3D 的新手,但我已经成功实现了。

简单的代码,没有进一步测试:

widget.h:

#ifndef AWIDGET_H
#define AWIDGET_H
#include <QWidget>
#include <QPushButton>
#include <Urho3D/Engine/Application.h>
class aWidget : public QWidget

    Q_OBJECT
public:
    explicit aWidget(QWidget *parent = 0)
    
        QPushButton *button = new QPushButton(this);
        connect(button, SIGNAL(clicked()), this, SLOT(pressed()));
    
public slots:
    void pressed()
    
        Urho3D::Context* context = new Urho3D::Context();
        Urho3D::Application *application = new Urho3D::Application(context);
        application->Run();
    
;
#endif // AWIDGET_H

main.cpp:

#include <QApplication>
#include <awidget.h>
int main(int argc, char* argv[])

    QApplication app(argc, argv);
    aWidget *widget = new aWidget();
    widget->show();
    return app.exec();

顺便说一句,我使用的是 Qt 5.9.0

【讨论】:

可能太简单了。 我没有机会测试它,但无论如何感谢您的回答。 +1【参考方案2】:

所以答案很简单。而不是通过调用来运行 QApplication

app->exec();

需要从您的主循环中手动并定期调用它:

app->processEvents();

这将确保 Qt 使用的所有事件都得到处理,并且 QApplication 将做出相应的响应。 示例:

#include <QApplication>
#include <awidget.h>

int main(int argc, char* argv[])

    QApplication app(argc, argv);
    bool shallrun = true;
    aWidget *widget = new aWidget();
    widget->show();

    while (shallrun)
    
       app->processEvents();
       ...
    

    ...

【讨论】:

以上是关于从 main 运行 Urho3D 和 Qt的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Main 获取文本数据集并使用 anylogic 在参数变化实验中运行?

使用 sbt 从 src/main/scala 读取文件

如何从 Jar 运行一个不在其 Manifest 文件中的 Main-Class 的类

如何从代码运行 tensorflow 对象检测 api (model_main_tf2)?

编辑后的帖子如何从main()运行TestNG测试,我已经编写了主类 - 但是现在呢?

如何从终端运行Java public static void main [复制]