Я быстро изучаю Qt и хочу создать танковую игру. Я создаю компоненты QML с помощью C ++ динамически. Он отлично работает, пока я не использую сигналы QML для подключения слотов C ++. Когда QML излучает сигнал, C ++ не принимает его и не выполняет функцию.
Следующий код упрощен.
main. cpp
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
GameMap map;
map.generateMap();
return app.exec();
}
gamemap . cpp
void GameMap::generateMap()
{
Player player;
player.generate(&view);
//QEventLoop loop; //it works when I add these code, but still causes some problems. So I'm wondering if there is other solution?
//loop.exec();
}
игрок. cpp
void Player::generate(View *view)
{
QQmlComponent component(view.engine(),QUrl("qrc:/Player.qml"));
QObject *myObject=component.create();
QQuickItem *item=qobject_cast <QQuickItem*>(myObject);
QQmlEngine::setObjectOwnership(item, QQmlEngine::CppOwnership);
item->setParentItem(view.rootObject());
item->setParent(&view);
QObject::connect(item,SIGNAL(queryCppFun(QString)),this,SLOT(queryFunction(QString)));
}
void Player::queryFunction(const QString &funName)
{
if(funName=="destroy")
qDebug()<<funName;
}
Player.qml
signal queryCppFun(string funName);
function initDestroy(){
queryCppFun("destroy");
}