This commit is contained in:
朱子楚\zhuzi 2023-08-17 22:06:26 +08:00
parent 9bf6ed9d1d
commit b47f2d12ad
6 changed files with 65 additions and 21 deletions

View File

@ -27,7 +27,19 @@ FluScrollablePage{
} }
} }
Image{
id:image
Layout.preferredHeight: 400
Layout.preferredWidth: 400
fillMode: Image.PreserveAspectFit
}
FluScreenshot{ FluScreenshot{
id:screenshot id:screenshot
captrueMode: FluScreenshotType.File
onCaptrueCompleted:
(captrue)=>{
image.source = captrue
}
} }
} }

View File

@ -269,18 +269,6 @@ CustomWindow {
} }
} }
Shortcut {
sequence: "F7"
context: Qt.WindowShortcut
onActivated: {
screenshot.open()
}
}
FluScreenshot{
id:screenshot
}
FluTour{ FluTour{
id:tour id:tour
steps:[ steps:[

View File

@ -4,6 +4,18 @@
#include <QObject> #include <QObject>
#include <QtQml/qqml.h> #include <QtQml/qqml.h>
namespace FluScreenshotType {
Q_NAMESPACE
enum CaptrueMode {
Pixmap = 0x0000,
File = 0x0001,
};
Q_ENUM_NS(CaptrueMode)
QML_NAMED_ELEMENT(FluScreenshotType)
}
namespace FluThemeType { namespace FluThemeType {
Q_NAMESPACE Q_NAMESPACE
enum DarkMode { enum DarkMode {

View File

@ -2,6 +2,8 @@
#include <QGuiApplication> #include <QGuiApplication>
#include <QScreen> #include <QScreen>
#include <QQuickWindow> #include <QQuickWindow>
#include <QDir>
#include <Def.h>
#include <QtMath> #include <QtMath>
Screenshot::Screenshot(QQuickItem* parent) : QQuickPaintedItem(parent) Screenshot::Screenshot(QQuickItem* parent) : QQuickPaintedItem(parent)
@ -60,6 +62,13 @@ void ScreenshotBackground::capture(const QPoint& start,const QPoint& end){
} }
void ScreenshotBackground::handleGrabResult(){ void ScreenshotBackground::handleGrabResult(){
_sourcePixmap.copy(_captureRect).save("aaa.png"); if(_captureMode == FluScreenshotType::CaptrueMode::Pixmap){
Q_EMIT captrueToPixmapCompleted(_sourcePixmap.copy(_captureRect));
}
if(_captureMode == FluScreenshotType::CaptrueMode::File){
auto filePath = _saveFolder.toLocalFile().append("/").append(QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch())).append(".png");
_sourcePixmap.copy(_captureRect).save(filePath);
Q_EMIT captrueToFileCompleted(QUrl::fromLocalFile(filePath));
}
} }

View File

@ -11,11 +11,15 @@ class ScreenshotBackground : public QQuickPaintedItem
{ {
Q_OBJECT; Q_OBJECT;
QML_NAMED_ELEMENT(ScreenshotBackground) QML_NAMED_ELEMENT(ScreenshotBackground)
Q_PROPERTY_AUTO(QUrl,saveFolder);
Q_PROPERTY_AUTO(int,captureMode);
public: public:
ScreenshotBackground(QQuickItem* parent = nullptr); ScreenshotBackground(QQuickItem* parent = nullptr);
void paint(QPainter* painter) override; void paint(QPainter* painter) override;
Q_SLOT void handleGrabResult(); Q_SLOT void handleGrabResult();
Q_INVOKABLE void capture(const QPoint& start,const QPoint& end); Q_INVOKABLE void capture(const QPoint& start,const QPoint& end);
Q_SIGNAL void captrueToPixmapCompleted(QPixmap captrue);
Q_SIGNAL void captrueToFileCompleted(QUrl captrue);
private: private:
QRect _desktopGeometry; QRect _desktopGeometry;
QPixmap _desktopPixmap; QPixmap _desktopPixmap;

View File

@ -2,12 +2,18 @@ import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Controls.Basic import QtQuick.Controls.Basic
import QtQuick.Layouts import QtQuick.Layouts
import Qt.labs.platform
import FluentUI import FluentUI
Loader { Item{
id:control
property int captrueMode: FluScreenshotType.Pixmap
property int dotSize: 5 property int dotSize: 5
property int borderSize: 1 property int borderSize: 1
property string saveFolder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
property color borderColor: FluTheme.primaryColor.dark property color borderColor: FluTheme.primaryColor.dark
signal captrueCompleted(var captrue)
QtObject{ QtObject{
id:d id:d
property int dotMouseSize: control.dotSize+10 property int dotMouseSize: control.dotSize+10
@ -15,7 +21,9 @@ Loader {
property bool enablePosition: false property bool enablePosition: false
property int menuMargins: 6 property int menuMargins: 6
} }
id:control Loader {
id:loader
}
Component{ Component{
id:com_screen id:com_screen
Window{ Window{
@ -29,16 +37,26 @@ Loader {
color: "#00000000" color: "#00000000"
onVisibleChanged: { onVisibleChanged: {
if(!window_screen.visible){ if(!window_screen.visible){
control.sourceComponent = undefined loader.sourceComponent = undefined
} }
} }
Component.onCompleted: { Component.onCompleted: {
// setGeometry(0,0,FluTools.getVirtualGeometry().width/2,FluTools.getVirtualGeometry().height)
setGeometry(0,0,screenshot_background.width,screenshot_background.height) setGeometry(0,0,screenshot_background.width,screenshot_background.height)
console.debug(width+";"+height)
} }
ScreenshotBackground{ ScreenshotBackground{
id:screenshot_background id:screenshot_background
captureMode:control.captrueMode
saveFolder: control.saveFolder
onCaptrueToPixmapCompleted:
(captrue)=>{
control.captrueCompleted(captrue)
loader.sourceComponent = undefined
}
onCaptrueToFileCompleted:
(captrue)=>{
control.captrueCompleted(captrue)
loader.sourceComponent = undefined
}
} }
Screenshot{ Screenshot{
id:screenshot id:screenshot
@ -79,7 +97,7 @@ Loader {
(mouse)=>{ (mouse)=>{
if (mouse.button === Qt.RightButton){ if (mouse.button === Qt.RightButton){
if(screenshot.start === Qt.point(0,0) && screenshot.end === Qt.point(0,0)){ if(screenshot.start === Qt.point(0,0) && screenshot.end === Qt.point(0,0)){
control.sourceComponent = undefined loader.sourceComponent = undefined
return return
} }
screenshot.start = Qt.point(0,0) screenshot.start = Qt.point(0,0)
@ -463,7 +481,7 @@ Loader {
iconSize: 18 iconSize: 18
iconColor: Qt.rgba(247/255,75/255,77/255,1) iconColor: Qt.rgba(247/255,75/255,77/255,1)
onClicked: { onClicked: {
control.sourceComponent = undefined loader.sourceComponent = undefined
} }
} }
FluIconButton{ FluIconButton{
@ -478,7 +496,8 @@ Loader {
} }
} }
function open(){ function open(){
control.sourceComponent = com_screen loader.sourceComponent = com_screen
} }
} }