[Solved] [Qt5, Windows] Qt::Tool / Qt::Popup flag does not work properly on QQuickView
-
using setTransientParent would solve the problem.
I also post this thread at: https://bugreports.qt-project.org/browse/QTBUG-29294
There are screenshots there.The first QQuickView is the father of the second QQuickView, the second view is set a 'Qt::Tool' flag. Then second view should be upon the first view, and the second view should be able to move outsize the area of first view.
@
QQuickView view;
view.setSource(QUrl::fromLocalFile("qml/view.qml"));
view.show();QQuickView view2(&view);
view2.setFlags(Qt::Tool);
view2.rootContext()->setContextProperty("window", &view2);
view2.setSource(QUrl::fromLocalFile("qml/view2.qml"));
view2.show();
qDebug() << view2.winId() << view2.parent()->winId();
@But the result is view2 cannot moved outside the area of first view.
Here are the code of the two qml files:
qml/view.qml
@
import QtQuick 2.0Rectangle {
id: main
width: 640
height: 480
color: "red"
}
@qml/view2.qml
@
import QtQuick 2.0Rectangle {
id: window_rect
color: "pink"
width: 240
height: 480MouseArea {
anchors.fill: parent
property variant clickPosonPressed: {
clickPos = Qt.point(mouse.x, mouse.y)
}onPositionChanged: {
var delta = Qt.point(mouse.x - clickPos.x, mouse.y - clickPos.y)
window.x += delta.x;
window.y += delta.y;
}
}
}
@HOWEVER, when I'm using Qt4, it works properly.
Qt4Code:
@
QDeclarativeView *view = new QDeclarativeView();
view->setSource(QUrl::fromLocalFile("qml/_view.qml"));QDeclarativeView *view2 = new QDeclarativeView(view);
view2->setWindowFlags(Qt::Tool);
view2->rootContext()->setContextProperty("window", view2);
view2->setSource(QUrl::fromLocalFile("qml/_view2.qml"));view->show();
view2->show();
@
view2 is upon view, and view2 can be moved freely, without the restriction of the first view.It just like the behavior of the toolbar of VisualStudio 2010, very common, but now I can't implement it using QQuickView..
Meanwhile, there are also problems using Qt::Popup. When I set Qt::Popup on a QQuickView, it behaves as if it has no father(top level window). Microsoft Spy++ also proved that it has no father. But I printed it's father using parent():
@
qDebug() << view2.winId() << view2.parent()->winId();
@
view2.parent() is not zero.My environment is Windows XP. I havn't tested these on linux.
I guess is it related to the new mechanism of QQuickWindow ?