从 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 在参数变化实验中运行?
如何从 Jar 运行一个不在其 Manifest 文件中的 Main-Class 的类
如何从代码运行 tensorflow 对象检测 api (model_main_tf2)?