바둑판 식으로 된 맵을 표시하기 위해 QtWidgets 데스크탑 앱에 독립형 Qt 예제 "mapviewer"를 포함시키는 것과 관련된 이상한 문제가 있습니다. 독립 실행 형, 예 : 지도를로드 중입니다. QQuickWidget을 사용하는 것이 권장되는 방법으로 QWidget 내부에 포함되어 있지만 예상대로 작동하지 않습니다.QWidget 안에 QQuickWidget 맵을 포함 시키면 작동하지 않습니다.
- QQuickWidget
view_
을 레이아웃에 추가하지 않으면 2 개의 (!) 최상위 위젯이 나타납니다. - 파란색 물음표 대신에
view_
을 레이아웃에 추가하면 아래 이미지의 가장 왼쪽 위젯이 예상대로 레이아웃에 추가됩니다. 하지만 여전히 빈지도보기는 최상위 위젯으로 유지됩니다. view_
에는 아무 것도로드되거나 표시되지 않습니다.view_
의 메뉴가 열리지 않습니다. 내가 그렇게 여기에 복잡 무엇인지 전혀 모른다#ifndef MAPWIDGET_H #define MAPWIDGET_H #include <QWidget> class QQuickWidget; class MapWidget : public QWidget { Q_OBJECT QQuickWidget *view_ = nullptr; public: explicit MapWidget(QWidget *parent = nullptr); ~MapWidget() = default; }; #endif // MAPWIDGET_H
:
#include "mapwidget.h" #include <QtQuickWidgets/QQuickWidget> #include <QLabel> #include <QVBoxLayout> #include <QQmlApplicationEngine> MapWidget::MapWidget(QWidget *parent) : QWidget(parent) { this->setLayout(new QVBoxLayout); this->layout()->addWidget(new QLabel("label")); view_ = new QQuickWidget(nullptr); view_->setWindowTitle("QQuickWidget"); // view_->engine()->addImportPath(QStringLiteral(":/imports")); QUrl url(QStringLiteral("qrc:///mapviewer.qml")); view_->setSource(url); // Show or embedd the widget, try it out view_->show(); // this->layout()->addWidget(view_); QFile f(":/mapviewer.qml"); if (f.open(QIODevice::ReadOnly)){} Q_ASSERT(f.isOpen()); // OKAY so the qml file is found f.close(); }
헤더 : 여기
는 소스입니다. 저는 QtWidgets에 익숙하지만 qml에 익숙하지 않으므로 아마도 아주 명백한 것이 부족할 것입니다.
그러나 QDeclarativeView는 더 이상 사용되지 않으며 Qt 5.9.2를 사용하고 있습니다. 이 경우 제안 된 대안은 QWidget을 기반으로하지 않는 QQuickView이므로 다른 QWidget에 추가 할 수 없습니다. – user2366975
QQuickView의 경우 대답을 업데이트했습니다 .... 대답의 맨 아래 부분을 살펴보십시오. – Naidu