mirror of
https://github.com/zhuzichu520/FluentUI.git
synced 2024-11-26 13:27:05 +08:00
update
This commit is contained in:
parent
b7acae1470
commit
ebad24e809
5
.gitmodules
vendored
5
.gitmodules
vendored
@ -1,3 +1,6 @@
|
|||||||
[submodule "framelesshelper"]
|
[submodule "framelesshelper"]
|
||||||
path = framelesshelper
|
path = framelesshelper
|
||||||
url = https://github.com/zhuzichu520/framelesshelper.git
|
url = https://github.com/zhuzichu520/framelesshelper.git
|
||||||
|
[submodule "zxing-cpp"]
|
||||||
|
path = zxing-cpp
|
||||||
|
url = https://github.com/zhuzichu520/zxing-cpp.git
|
@ -28,6 +28,8 @@ if (FLUENTUI_BUILD_FRAMELESSHEPLER)
|
|||||||
add_subdirectory(framelesshelper)
|
add_subdirectory(framelesshelper)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
add_subdirectory(zxing-cpp)
|
||||||
|
|
||||||
message("------------------------ FluentUI ------------------------")
|
message("------------------------ FluentUI ------------------------")
|
||||||
message("Build FluentUI demo applications.: ${FLUENTUI_BUILD_EXAMPLES}")
|
message("Build FluentUI demo applications.: ${FLUENTUI_BUILD_EXAMPLES}")
|
||||||
message("Build FramelessHelper.: ${FLUENTUI_BUILD_FRAMELESSHEPLER}")
|
message("Build FramelessHelper.: ${FLUENTUI_BUILD_FRAMELESSHEPLER}")
|
||||||
|
@ -133,7 +133,8 @@ FluExpander{
|
|||||||
"FluSpinBox",
|
"FluSpinBox",
|
||||||
"FluHttp",
|
"FluHttp",
|
||||||
"FluWatermark",
|
"FluWatermark",
|
||||||
"FluTour"
|
"FluTour",
|
||||||
|
"FluQRCode"
|
||||||
];
|
];
|
||||||
code = code.replace(/\n/g, "<br>");
|
code = code.replace(/\n/g, "<br>");
|
||||||
code = code.replace(/ /g, " ");
|
code = code.replace(/ /g, " ");
|
||||||
|
@ -331,6 +331,12 @@ FluObject{
|
|||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.other
|
title:lang.other
|
||||||
icon:FluentIcons.Shop
|
icon:FluentIcons.Shop
|
||||||
|
FluPaneItem{
|
||||||
|
title:"QRCode"
|
||||||
|
onTap:{
|
||||||
|
navigationView.push("qrc:/example/qml/page/T_QRCode.qml")
|
||||||
|
}
|
||||||
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Tour"
|
title:"Tour"
|
||||||
onTap:{
|
onTap:{
|
||||||
|
75
example/qml/page/T_QRCode.qml
Normal file
75
example/qml/page/T_QRCode.qml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Window
|
||||||
|
import FluentUI
|
||||||
|
import Qt5Compat.GraphicalEffects
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
|
FluScrollablePage{
|
||||||
|
|
||||||
|
title:"QRCode"
|
||||||
|
|
||||||
|
FluQRCode{
|
||||||
|
id:qrcode
|
||||||
|
Layout.topMargin: 20
|
||||||
|
size:slider_size.value
|
||||||
|
text:text_box.text
|
||||||
|
color:color_picker.colorValue
|
||||||
|
Layout.preferredWidth: size
|
||||||
|
Layout.preferredHeight: size
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout{
|
||||||
|
spacing: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
FluText{
|
||||||
|
text:"text:"
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
FluTextBox{
|
||||||
|
id:text_box
|
||||||
|
text:"会磨刀的小猪"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout{
|
||||||
|
spacing: 10
|
||||||
|
Layout.topMargin: 10
|
||||||
|
FluText{
|
||||||
|
text:"color:"
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
FluColorPicker{
|
||||||
|
id:color_picker
|
||||||
|
Component.onCompleted: {
|
||||||
|
setColor(Qt.rgba(0,0,0,1))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout{
|
||||||
|
spacing: 10
|
||||||
|
FluText{
|
||||||
|
text:"size:"
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
FluSlider{
|
||||||
|
id:slider_size
|
||||||
|
from:60
|
||||||
|
to:200
|
||||||
|
value: 120
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 20
|
||||||
|
code:'FluQRCode{
|
||||||
|
color:"red"
|
||||||
|
text:"会磨刀的小猪"
|
||||||
|
size:100
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -83,6 +83,7 @@ target_link_libraries(${PROJECT_NAME} PUBLIC
|
|||||||
Qt::CorePrivate
|
Qt::CorePrivate
|
||||||
Qt::QuickPrivate
|
Qt::QuickPrivate
|
||||||
Qt::QmlPrivate
|
Qt::QmlPrivate
|
||||||
|
ZXing
|
||||||
)
|
)
|
||||||
|
|
||||||
#安装
|
#安装
|
||||||
|
53
src/FluQRCode.cpp
Normal file
53
src/FluQRCode.cpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include "FluQRCode.h"
|
||||||
|
|
||||||
|
#include "BarcodeFormat.h"
|
||||||
|
#include "BitMatrix.h"
|
||||||
|
#include "MultiFormatWriter.h"
|
||||||
|
|
||||||
|
using namespace ZXing;
|
||||||
|
|
||||||
|
FluQRCode::FluQRCode(QQuickItem* parent) : QQuickPaintedItem(parent)
|
||||||
|
{
|
||||||
|
color(QColor(0,0,0,255));
|
||||||
|
size(100);
|
||||||
|
setWidth(_size);
|
||||||
|
setHeight(_size);
|
||||||
|
connect(this,&FluQRCode::textChanged,this,[=]{update();});
|
||||||
|
connect(this,&FluQRCode::colorChanged,this,[=]{update();});
|
||||||
|
connect(this,&FluQRCode::sizeChanged,this,[=]{
|
||||||
|
setWidth(_size);
|
||||||
|
setHeight(_size);
|
||||||
|
update();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FluQRCode::paint(QPainter* painter)
|
||||||
|
{
|
||||||
|
if(_text.isEmpty()){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(_text.length()>1108){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
painter->save();
|
||||||
|
painter->eraseRect(boundingRect());
|
||||||
|
auto format = ZXing::BarcodeFormatFromString("QRCode");
|
||||||
|
auto writer = MultiFormatWriter(format);
|
||||||
|
writer.setMargin(0);
|
||||||
|
writer.setEncoding(ZXing::CharacterSet::UTF8);
|
||||||
|
auto matrix = writer.encode(_text.toUtf8().constData(), 0, 0);
|
||||||
|
auto bitmap = ToMatrix<uint8_t>(matrix);
|
||||||
|
auto image = QImage(bitmap.data(), bitmap.width(), bitmap.height(), bitmap.width(), QImage::Format::Format_Grayscale8).copy();
|
||||||
|
QImage rgbImage = image.convertToFormat(QImage::Format_ARGB32);
|
||||||
|
for (int y = 0; y < rgbImage.height(); ++y) {
|
||||||
|
for (int x = 0; x < rgbImage.width(); ++x) {
|
||||||
|
QRgb pixel = rgbImage.pixel(x, y);
|
||||||
|
if (qRed(pixel) == 0 && qGreen(pixel) == 0 && qBlue(pixel) == 0) {
|
||||||
|
rgbImage.setPixelColor(x, y, _color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
painter->drawImage(QRect(0, 0, static_cast<int>(width()), static_cast<int>(height())), rgbImage);
|
||||||
|
painter->restore();
|
||||||
|
}
|
22
src/FluQRCode.h
Normal file
22
src/FluQRCode.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef FLUQRCODE_H
|
||||||
|
#define FLUQRCODE_H
|
||||||
|
|
||||||
|
#include <QQuickItem>
|
||||||
|
#include <QQuickPaintedItem>
|
||||||
|
#include <QPainter>
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
class FluQRCode : public QQuickPaintedItem
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY_AUTO(QString,text)
|
||||||
|
Q_PROPERTY_AUTO(QColor,color)
|
||||||
|
Q_PROPERTY_AUTO(int,size);
|
||||||
|
QML_NAMED_ELEMENT(FluQRCode)
|
||||||
|
public:
|
||||||
|
explicit FluQRCode(QQuickItem *parent = nullptr);
|
||||||
|
void paint(QPainter* painter) override;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FLUQRCODE_H
|
1
zxing-cpp
Submodule
1
zxing-cpp
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 079944e235a63fd7956e1ed71ea66ac638dc44e7
|
Loading…
Reference in New Issue
Block a user