mirror of https://github.com/status-im/qzxing.git
157 lines
4.0 KiB
QML
157 lines
4.0 KiB
QML
import QtQuick 2.5
|
|
import QtQuick.Window 2.0
|
|
import QtQuick.Controls 2.0
|
|
import QtQuick.Layouts 1.1
|
|
import QtMultimedia 5.5
|
|
|
|
import QZXing 3.1
|
|
|
|
ApplicationWindow
|
|
{
|
|
id: window
|
|
visible: true
|
|
width: 640
|
|
height: 480
|
|
title: "Qt QZXing Filter Test"
|
|
|
|
property int detectedTags: 0
|
|
property string lastTag: ""
|
|
|
|
Rectangle
|
|
{
|
|
id: bgRect
|
|
color: "white"
|
|
anchors.fill: videoOutput
|
|
}
|
|
|
|
Text
|
|
{
|
|
id: text1
|
|
wrapMode: Text.Wrap
|
|
font.pixelSize: 20
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
z: 50
|
|
text: "Tags detected: " + detectedTags
|
|
}
|
|
Text
|
|
{
|
|
id: fps
|
|
font.pixelSize: 20
|
|
anchors.top: parent.top
|
|
anchors.right: parent.right
|
|
z: 50
|
|
text: (1000 / zxingFilter.timePerFrameDecode).toFixed(0) + "fps"
|
|
}
|
|
|
|
Camera
|
|
{
|
|
id:camera
|
|
focus {
|
|
focusMode: CameraFocus.FocusContinuous
|
|
focusPointMode: CameraFocus.FocusPointAuto
|
|
}
|
|
}
|
|
|
|
VideoOutput
|
|
{
|
|
id: videoOutput
|
|
source: camera
|
|
anchors.top: text1.bottom
|
|
anchors.bottom: text2.top
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
autoOrientation: true
|
|
fillMode: VideoOutput.Stretch
|
|
filters: [ zxingFilter ]
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
camera.focus.customFocusPoint = Qt.point(mouse.x / width, mouse.y / height);
|
|
camera.focus.focusMode = CameraFocus.FocusMacro;
|
|
camera.focus.focusPointMode = CameraFocus.FocusPointCustom;
|
|
}
|
|
}
|
|
Rectangle {
|
|
id: captureZone
|
|
color: "red"
|
|
opacity: 0.2
|
|
width: parent.width / 2
|
|
height: parent.height / 2
|
|
anchors.centerIn: parent
|
|
}
|
|
}
|
|
|
|
QZXingFilter
|
|
{
|
|
id: zxingFilter
|
|
captureRect: {
|
|
// setup bindings
|
|
videoOutput.contentRect;
|
|
videoOutput.sourceRect;
|
|
return videoOutput.mapRectToSource(videoOutput.mapNormalizedRectToItem(Qt.rect(
|
|
0.25, 0.25, 0.5, 0.5
|
|
)));
|
|
}
|
|
|
|
decoder {
|
|
enabledDecoders: QZXing.DecoderFormat_EAN_13 | QZXing.DecoderFormat_CODE_39 | QZXing.DecoderFormat_QR_CODE
|
|
|
|
onTagFound: {
|
|
console.log(tag + " | " + decoder.foundedFormat() + " | " + decoder.charSet());
|
|
|
|
window.detectedTags++;
|
|
window.lastTag = tag;
|
|
}
|
|
|
|
tryHarder: false
|
|
}
|
|
|
|
onDecodingStarted:
|
|
{
|
|
// console.log("started");
|
|
}
|
|
|
|
property int framesDecoded: 0
|
|
property real timePerFrameDecode: 0
|
|
|
|
onDecodingFinished:
|
|
{
|
|
timePerFrameDecode = (decodeTime + framesDecoded * timePerFrameDecode) / (framesDecoded + 1);
|
|
framesDecoded++;
|
|
if(succeeded)
|
|
console.log("frame finished: " + succeeded, decodeTime, timePerFrameDecode, framesDecoded);
|
|
}
|
|
}
|
|
|
|
Text
|
|
{
|
|
id: text2
|
|
wrapMode: Text.Wrap
|
|
font.pixelSize: 20
|
|
anchors.bottom: parent.bottom
|
|
anchors.left: parent.left
|
|
z: 50
|
|
text: "Last tag: " + lastTag
|
|
}
|
|
Switch {
|
|
text: "Autofocus"
|
|
checked: camera.focus.focusMode === CameraFocus.FocusContinuous
|
|
anchors {
|
|
right: parent.right
|
|
bottom: parent.bottom
|
|
}
|
|
onCheckedChanged: {
|
|
if (checked) {
|
|
camera.focus.focusMode = CameraFocus.FocusContinuous
|
|
camera.focus.focusPointMode = CameraFocus.FocusPointAuto
|
|
} else {
|
|
camera.focus.focusPointMode = CameraFocus.FocusPointCustom
|
|
camera.focus.customFocusPoint = Qt.point(0.5, 0.5)
|
|
}
|
|
}
|
|
font.family: Qt.platform.os === 'android' ? 'Droid Sans Mono' : 'Monospace'
|
|
font.pixelSize: Screen.pixelDensity * 5
|
|
}
|
|
}
|