タイルマップを表示するために、QtWidgetsデスクトップアプリケーション内にスタンドアロンQtの例「mapviewer」を埋め込むことに関する奇妙な問題があります。 スタンドアロンで動作します。地図を読み込む。 QQuickWidgetを推奨する方法でQWidgetに埋め込まれていますが、期待どおりに動作するものはありません。QWidget内にQQuickWidgetマップを埋め込むことができません
- QQuickWidget
view_
をレイアウトに追加しないと、トップレベルウィジェットが2つ(!)表示されます。 - 青い疑問符の代わりに
view_
をレイアウトに追加すると、下の画像の一番左のウィジェットが予想通りにレイアウトに追加されます。しかし、まだ空のマップビューはトップレベルウィジェットのままです。 view_
には何も表示されません。view_
のメニューは開きません。ここで
ソースです:
#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();
}
はヘッダ:
#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
私はここに非常に複雑である何見当がつかない。私はQtWidgetsについてよく知っていますが、qmlについては初めてです。
QDeclarativeViewは廃止されました。私はQt 5.9.2を使用しています。このケースでは、QWidgetに基づいていないQQuickViewが推奨されているので、別のQWidgetに追加することはできません。 – user2366975
QQuickViewの場合、私は答えを更新しました....答えの一番下を見てください。 – Naidu