[英]What is the difference between QQmlApplicationEngine and QQuickView?
[英]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.