簡體   English   中英

有沒有辦法在 QQmlApplicationEngine 或 QQuickView 中嵌入 QWidget?

[英]Is there any way to embed a QWidget inside a QQmlApplicationEngine or QQuickView?

我找到了一種在 QML 中嵌入 QWidget 的方法,通過使用 QQuickWidget 渲染(錨定,QWidget 與 QQuickWidget 位置),但我試圖使用 QQuickView/QmlApplicationEngine,它使用不同的渲染系統和 QWidget未顯示。

有任何想法嗎? 提前致謝!

評論中鏈接的帖子都沒有回答我的問題。 有一個小工作(對於那些需要它的人):

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine *engine = new QQmlApplicationEngine(&app);
    engine->load(QUrl("qrc:/qml/main.qml"));
    QQuickWindow* qmlwindow = qobject_cast<QQuickWindow *>(engine->rootObjects().first());

    CustomWidget *customwidget = new CustomWidget();
    QWindow* customwidgetwindow = QWindow::fromWinId(customwidget->winId());

    customwidgetwindow->setParent(qmlwindow);
    customwidget->show();

    if (window) {
        QQuickItem *qmlCustomWidget = qmlwindow->findChild<QQuickItem*>("qmlcustomwidget");
        if (qmlCustomWidget) {
            new WidgetAnchor(customwidgetwindow, qmlCustomWidget);
        }
    }

return app.exec();
}

其中 CustomWidget 是基於 QWidget 的類,而 WidgetAnchor.cpp 是:

WidgetAnchor::WidgetAnchor(QWidget* pWidget, QQuickItem* pItem)
    : QObject(pWidget),
      _pWidget(pWidget),
      _pQuickItem(pItem)
{
    connect(_pQuickItem, &QQuickItem::xChanged, this, &WidgetAnchor::updateGeometry);
    connect(_pQuickItem, &QQuickItem::yChanged, this, &WidgetAnchor::updateGeometry);
    connect(_pQuickItem, &QQuickItem::widthChanged, this, &WidgetAnchor::updateGeometry);
    connect(_pQuickItem, &QQuickItem::heightChanged, this, &WidgetAnchor::updateGeometry);
    updateGeometry();
}

void WidgetAnchor::updateGeometry() {
    if (_pQuickItem) {
        QRectF r = _pQuickItem->mapRectToItem(nullptr, QRectF(_pQuickItem->x(), _pQuickItem->y(), _pQuickItem->width(), _pQuickItem->height()));
    _pWidget->setGeometry(r.toRect());
    }
}

在 main.qml 上你有:

import QtQuick 2.0
import QtQuick.Window 2.3

Window {
    id: root
    visible: true
    width: 500; height: 500

    Item {
        objectName: "qmlcustomwidget"
        anchors.fill: parent
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM