mirror of
https://github.com/zhuzichu520/FluentUI.git
synced 2024-11-26 21:37:04 +08:00
update
This commit is contained in:
parent
b7acae1470
commit
ebad24e809
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +1,6 @@
|
||||
[submodule "framelesshelper"]
|
||||
path = framelesshelper
|
||||
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)
|
||||
endif ()
|
||||
|
||||
add_subdirectory(zxing-cpp)
|
||||
|
||||
message("------------------------ FluentUI ------------------------")
|
||||
message("Build FluentUI demo applications.: ${FLUENTUI_BUILD_EXAMPLES}")
|
||||
message("Build FramelessHelper.: ${FLUENTUI_BUILD_FRAMELESSHEPLER}")
|
||||
|
@ -133,7 +133,8 @@ FluExpander{
|
||||
"FluSpinBox",
|
||||
"FluHttp",
|
||||
"FluWatermark",
|
||||
"FluTour"
|
||||
"FluTour",
|
||||
"FluQRCode"
|
||||
];
|
||||
code = code.replace(/\n/g, "<br>");
|
||||
code = code.replace(/ /g, " ");
|
||||
|
@ -331,6 +331,12 @@ FluObject{
|
||||
FluPaneItemExpander{
|
||||
title:lang.other
|
||||
icon:FluentIcons.Shop
|
||||
FluPaneItem{
|
||||
title:"QRCode"
|
||||
onTap:{
|
||||
navigationView.push("qrc:/example/qml/page/T_QRCode.qml")
|
||||
}
|
||||
}
|
||||
FluPaneItem{
|
||||
title:"Tour"
|
||||
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::QuickPrivate
|
||||
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