[Interest] QML version of QRubberBand
Alexander Ivash
elderorb at gmail.com
Tue Apr 12 22:36:57 CEST 2016
I've made some experiments and got basic rubber band working using
additional QML Window. But the issue I confronted is that
transparency/opacity on Windows 7 (and Windows 10) seems to be broken.
As soon as I start re-sizing area, opacity and transparency seems to
be reset and instead of nice semi-transparent rectangle I see ugly
opaque items... I can only hope I'm doing something wrong otherwise
seems like major issue in Qt :( Just in case, here is the code of
'main.qml':
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window {
id: root
visible: true
Button {
text: "show rubber"
onClicked: {
root.visible = false
var rubberBand = rubberBandFactory.createObject(null);
rubberBand.visible = true
rubberBand.onAreaSelected.connect(function(x, y, w, h) {
console.log(x, y, w, h)
root.visible = true
})
}
}
property var rubberBandFactory: Component {
Window {
id: rubber
visible: true
flags: Qt.FramelessWindowHint | Qt.Popup
modality: Qt.NonModal
width: Screen.width
height: Screen.height
color: "red"
opacity: 0.2
signal areaSelected(int x, int y, int width, int height);
property bool initialPosSelected: false;
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: false
onPressed: {
marker.x = mouseArea.mouseX
marker.y = mouseArea.mouseY
hoverEnabled = true;
}
onPositionChanged: {
marker.width = mouseArea.mouseX - marker.x
marker.height = mouseArea.mouseY - marker.y
}
onReleased: {
hoverEnabled = false
rubber.visible = false
areaSelected(marker.x, marker.y, marker.width,
marker.height)
}
}
Rectangle {
id: marker
width: 0
height: 0
color: 'green'
}
}
}
}
2016-04-12 20:06 GMT+03:00 Alexander Ivash <elderorb at gmail.com>:
>> You'll want a background MouseArea, and onMouseDown, you locate the Rectangle x,y, and on mouseMove, you adjust the height and width per the new mouse > location minus, the y and x.
>> I've not one a "rubberband" per se, just a background swipe gesture, but it should work the same.
>
>
> Thank you for quick reply, but do I _have_to_ create separate
> invisible top-level QML Window as it can be done in other way? Lets
> say I have small window 200x200 px
> with a button which should make rubberband visible and screen with
> resolution 1024x768. After appearing rubberband should allow to select
> any part of the whole screen and not only 200x200 area.
>
>
> 2016-04-12 18:21 GMT+03:00 Jason H <jhihn at gmx.com>:
>> You'll want a background MouseArea, and onMouseDown, you locate the Rectangle x,y, and on mouseMove, you adjust the height and width per the new mouse location minus, the y and x.
>> I've not one a "rubberband" per se, just a background swipe gesture, but it should work the same.
>>
>>
>>> Sent: Tuesday, April 12, 2016 at 5:57 AM
>>> From: "Alexander Ivash" <elderorb at gmail.com>
>>> To: "interest at qt-project.org" <interest at qt-project.org>
>>> Subject: [Interest] QML version of QRubberBand
>>>
>>> Is it possible to implement QML version of QRubberBand ? I mean fully
>>> QML, without any widgets dependency?
>>>
>>> I understand it is trivial to make draggable area inside QML window.
>>> But what about draggable area over the whole screen? Should I create
>>> separate invisible QML window with the geometry of the screen and just
>>> put draggable rectangle inside or better approach exists?
>>>
>>> Alexander
>>> _______________________________________________
>>> Interest mailing list
>>> Interest at qt-project.org
>>> http://lists.qt-project.org/mailman/listinfo/interest
>>>
More information about the Interest
mailing list