qml 윈도우의 winId를 얻고 싶습니다. 다음 파일이 있습니다.QML로드 된 qml 윈도우의 winId를 얻으십시오.
main.qml :
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window {
id: myMainWindow
title: "MyMainWindow"
width: 200
height: 200;
visible: true
Component.onCompleted: {
x = 40
y = 40
}
}
내 MAIN.CPP :
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QWindow>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<FbItem>("fbitem", 1, 0, "FbItem");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject* m_rootObject = engine.rootObjects().first();
auto rect_area = m_rootObject->findChild<QWindow*>("myMainWindow"); //the id of the Window in qml
//both lines make the application crash
//HWND hWnd = reinterpret_cast<HWND>(rect_area->winId());
WId wid = rect_area->winId();
return app.exec();
}
충돌 메시지는 다음과 같습니다
The inferior stopped because it triggered an exception.
Stopped in thread 0 by: Exception at 0x13500da, code: 0x0000005: read access violation at: 0x0, flags=0x0 (first chance).
잘못 무엇입니까? 내 창문을 어떻게 얻을 수 있습니까?
편집 : 우리는 rect_area가 여전히 나쁘다는 것을 알 수 있습니다. 편집 main.qml에서 : 나는 코멘트에 눈치
Window {
id: _component
objectName: "myMainWindow"
...
}
'findChild'에 의해 반환 된 값을 확인해야합니다. 귀하의 경우에는'myMainWindow'라는 이름의 창이 없으므로 아마 null 일 것입니다. 'objectName : "myMainWindow"'를 윈도우에 추가하면 윈도우에 액세스 할 수 있습니다. – folibis