QML学习——Qt Quick Controls 1 Examples Calendar/FileSystemBrowser(九)

news2024/11/23 20:13:50
02 File System Browser

Show:

  • 演示

Notes:

  • 使用了自定义的继承自QFileSystemModel的类,在原有的基础上新加了角色(role),并且重写了QFileSystemModel中的data函数、及角色和字符串描述对应的哈希表;

  • 使用系统的文件资源管理器打开该文件的链接:Qt.openUrlExternally(url)

  • 关于QML的几种注册及属性:

    • qmlRegisterType方式注册:

      • 优点:

        1. QML 文件中可以直接使用注册的类型,创建其实例,并与其进行交互。
        2. 支持类型安全,QML 编辑器(如 Qt Creator)可以提供自动补全和类型检查。
        3. 适用于需要多个实例的情况,因为 QML 可以直接创建和管理这些实例。
      • 缺点:

        1. 需要 C++ 类与 QML 之间进行明确的类型匹配。
        2. 如果类具有复杂的构造函数或需要特定的初始化逻辑,可能需要额外的设置。
    • qmlRegisterUncreatableType注册一个C++类型:

      • 该类型不可实例化,但应可识别为QML类型系统的类型。
      • 如果类型的枚举或附加属性应该可以从QML访问,但是类型本身不应该是可实例化的,那么这很有用。
    • setContextProperty():将 C++ 对象或值设置为 QML 上下文的属性,这样 QML 文件中就可以通过属性名直接访问它。

      • 优点:
        1. 简单直接,适用于将单例或全局对象暴露给 QML。
        2. 不需要复杂的类型匹配或注册。
        3. 适用于需要多个实例的情况,因为 QML 可以直接创建和管理这些实例。
      • 缺点:
        1. 不支持类型安全,QML 编辑器可能无法提供自动补全或类型检查。
        2. 只能在 QML 文件中访问一个特定的实例(通常是单例)。
  • 关于Q_ENUM

    • This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.
    • In new code, you should prefer the use of the Q_ENUM() macro, which makes the type available also to the meta type system.
  • If the model is a string list or object list, the delegate is also exposed to a read-only modelData property that holds the string or object data.

  • Note: model, index, and modelData roles are not accessible if the delegate contains required properties, unless it has also required properties with matching names.

SourceCode:

  • TestCustomFileSystemBrowser.qml

  • import QtQuick 2.15
    import QtQuick.Controls 1.5
    import QtQml.Models 2.15
    
    import TestClasses.QC1.OfficialExample.CustomFileSystemModel 1.0
    
    Item {
        width: 640
        height: 480
    
        MenuBar {
            Menu {
                title: qsTr("File")
                MenuItem {
                    text: qsTr("Exit")
                    onTriggered: Qt.quit();
                }
            }
        }
    
        Row {
            id: row_ID
            anchors.top: parent.top
            anchors.topMargin: 12
            anchors.horizontalCenter: parent.horizontalCenter
    
            ExclusiveGroup {
                id: eg
            }
    
            Repeater {
                model: [ "None", "Single", "Extended", "Multi", "Contig."]
                Button {
                    //If the model is a string list or object list, the delegate is also exposed to a read-only modelData property that holds the string or object data.
                    text: modelData
                    exclusiveGroup: eg
                    checkable: true
                    checked: index === 1
                    onClicked: view.selectionMode = index
                }
            }
        }
    
        ItemSelectionModel {
            id: sel
            model: customFSysModel
        }
    
        TreeView {
            id: view
            anchors.fill: parent
            anchors.margins: 2 * 12 + row_ID.height
            model: customFSysModel
            rootIndex: rootPathIndex
            selection: sel
    
            TableViewColumn {
                title: "Name"
                role: "fileName"
                resizable: true
            }
    
            TableViewColumn {
                title: "Size"
                role: "byteSize"
                resizable: true
                horizontalAlignment : Text.AlignRight
                width: 70
            }
    
            TableViewColumn {
                title: "Permissions"
                role: "customFilePermissions"
                resizable: true
                width: 100
            }
    
            TableViewColumn {
                title: "Date Modified"
                role: "lastModified"
                resizable: true
            }
    
            onActivated : {
                var url = customFSysModel.data(index, CustomFSysModel.UrlStringRole)
                //使用系统的文件资源管理器打开该文件的链接
                Qt.openUrlExternally(url)
            }
        }
    }
    
  • customFileSystemModel.h

  • #ifndef CUSTOMFILESYSTEMMODEL_H
    #define CUSTOMFILESYSTEMMODEL_H
    
    #include <QFileSystemModel>
    #include <QObject>
    
    class CustomFileSystemModel : public QFileSystemModel
    {
        Q_OBJECT
    public:
        explicit CustomFileSystemModel(QObject *parent = nullptr);
    
        //自定义角色
        enum Roles  {
            SizeRole = ((Qt::UserRole + 3 == QFileSystemModel::FilePermissions) ? (Qt::UserRole + 4) : (QFileSystemModel::FilePathRole + 1)), //0x0104
            CustomFilePermissionsRole,
            LastModifiedRole,
            UrlStringRole
        };
        //This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.
        //In new code, you should prefer the use of the Q_ENUM() macro, which makes the type available also to the meta type system.
        Q_ENUM(Roles)
    
        // QAbstractItemModel interface
    public:
        //重写QFileSystemModel中的data函数
        QVariant data(const QModelIndex &index, int role) const override;
        //重写QAbstractItemModel中的roleNames函数
        QHash<int, QByteArray> roleNames() const override;
    };
    
    //file permissions:
    
    static inline QString permissionString(const QFileInfo &fi)
    {
        const QFile::Permissions permissions = fi.permissions();
        QString result = QLatin1String("----------");
        if (fi.isSymLink()) {
            result[0] = QLatin1Char('l');
        } else if (fi.isDir()) {
            result[0] = QLatin1Char('d');
        } else {
            result[0] = QLatin1Char('-');
        }
    
        if (permissions & QFileDevice::ReadUser)
            result[1] = QLatin1Char('r');
        if (permissions & QFileDevice::WriteUser)
            result[2] = QLatin1Char('w');
        if (permissions & QFileDevice::ExeUser)
            result[3] = QLatin1Char('x');
        if (permissions & QFileDevice::ReadGroup)
            result[4] = QLatin1Char('r');
        if (permissions & QFileDevice::WriteGroup)
            result[5] = QLatin1Char('w');
        if (permissions & QFileDevice::ExeGroup)
            result[6] = QLatin1Char('x');
        if (permissions & QFileDevice::ReadOther)
            result[7] = QLatin1Char('r');
        if (permissions & QFileDevice::WriteOther)
            result[8] = QLatin1Char('w');
        if (permissions & QFileDevice::ExeOther)
            result[9] = QLatin1Char('x');
        return result;
    }
    
    //human readable file size:
    static inline QString sizeString(const QFileInfo &fi)
    {
        if (!fi.isFile())
            return QString();
        const qint64 size = fi.size();
        if (size > static_cast<qint64>(1024) * 1024 * 1024 * 10)
            return QString::number(size / (1024 * 1024 * 1024)) + QLatin1Char('G');
        if (size > 1024 * 1024 * 10)
            return QString::number(size / (1024 * 1024)) + QLatin1Char('M');
        if (size > 1024 * 10)
            return QString::number(size / 1024) + QLatin1Char('K');
        return QString::number(size) + QLatin1Char('B');
    }
    
    #endif // CUSTOMFILESYSTEMMODEL_H
    
  • customFileSystemModel.cpp

  • #include "customFileSystemModel.h"
    
    #include <QLocale>
    #include <QUrl>
    #include <QDateTime>
    
    CustomFileSystemModel::CustomFileSystemModel(QObject *parent) : QFileSystemModel(parent)
    {
    
    }
    
    //重写QFileSystemModel中的data函数
    QVariant CustomFileSystemModel::data(const QModelIndex &index, int role) const
    {
        //自定义数据
        if (index.isValid() && role >= SizeRole) {
            switch (role) {
            case SizeRole:
                return QVariant(sizeString(fileInfo(index)));
            case CustomFilePermissionsRole:
                return QVariant(permissionString(fileInfo(index)));
            case LastModifiedRole:
                return QVariant(QLocale::system().toString(fileInfo(index).lastModified(), QLocale::ShortFormat)); //根据本地系统时间的短格式来设定最后修改时间样式
            case UrlStringRole:
                return QVariant(QUrl::fromLocalFile(filePath(index)).toString());
            default:
                break;
            }
        }
        //原始数据
        return QFileSystemModel::data(index, role);
    }
    
    //Returns the model's names. //QML Role Name
    QHash<int, QByteArray> CustomFileSystemModel::roleNames() const
    {
        //原有的角色名字
        QHash<int, QByteArray> result = QFileSystemModel::roleNames();
        result.insert(SizeRole, QByteArrayLiteral("byteSize"));
        result.insert(CustomFilePermissionsRole, QByteArrayLiteral("customFilePermissions"));
        result.insert(LastModifiedRole, QByteArrayLiteral("lastModified"));
        return result;
    }
    
01 Calendar

在这里插入图片描述

  • 本地数据库存储数据

  • SQL语句

  • event.h

  • #ifndef EVENT_H
    #define EVENT_H
    
    #include <QDateTime>
    #include <QObject>
    #include <QString>
    
    class Event : public QObject
    {
        Q_OBJECT
    
        Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
        Q_PROPERTY(QDateTime startDate READ startDate WRITE setStartDate NOTIFY startDateChanged)
        Q_PROPERTY(QDateTime endDate READ endDate WRITE setEndDate NOTIFY endDateChanged)
    public:
        explicit Event(QObject *parent = 0);
    
        QString name() const;
        void setName(const QString &name);
    
        QDateTime startDate() const;
        void setStartDate(const QDateTime &startDate);
    
        QDateTime endDate() const;
        void setEndDate(const QDateTime &endDate);
    signals:
        void nameChanged(const QString &name);
        void startDateChanged(const QDateTime &startDate);
        void endDateChanged(const QDateTime &endDate);
    private:
        QString mName;
        QDateTime mStartDate;
        QDateTime mEndDate;
    };
    
    #endif
    
  • event.cpp

  • #include "event.h"
    
    Event::Event(QObject *parent) :
        QObject(parent)
    {
    }
    
    QString Event::name() const
    {
        return mName;
    }
    
    void Event::setName(const QString &name)
    {
        if (name != mName) {
            mName = name;
            emit nameChanged(mName);
        }
    }
    
    QDateTime Event::startDate() const
    {
        return mStartDate;
    }
    
    void Event::setStartDate(const QDateTime &startDate)
    {
        if (startDate != mStartDate) {
            mStartDate = startDate;
            emit startDateChanged(mStartDate);
        }
    }
    
    QDateTime Event::endDate() const
    {
        return mEndDate;
    }
    
    void Event::setEndDate(const QDateTime &endDate)
    {
        if (endDate != mEndDate) {
            mEndDate = endDate;
            emit endDateChanged(mEndDate);
        }
    }
    
  • sqleventmodel.h

  • #ifndef SQLEVENTMODEL_H
    #define SQLEVENTMODEL_H
    
    #include <QList>
    #include <QObject>
    
    
    class SqlEventModel : public QObject
    {
        Q_OBJECT
    
    public:
        SqlEventModel();
    
        Q_INVOKABLE QList<QObject*> eventsForDate(const QDate &date);
    
    private:
        static void createConnection();
    };
    
    #endif
    
  • sqleventmodel.cpp

  • #include "sqleventmodel.h"
    #include "event.h"
    
    #include <QDebug>
    #include <QFileInfo>
    #include <QSqlError>
    #include <QSqlQuery>
    
    SqlEventModel::SqlEventModel()
    {
        createConnection();
    }
    
    QList<QObject*> SqlEventModel::eventsForDate(const QDate &date)
    {
        const QString queryStr = QString::fromLatin1("SELECT * FROM Event WHERE '%1' >= startDate AND '%1' <= endDate").arg(date.toString("yyyy-MM-dd"));
        QSqlQuery query(queryStr);
        if (!query.exec())
            qFatal("Query failed");
    
        QList<QObject*> events;
        while (query.next()) {
            Event *event = new Event(this);
            event->setName(query.value("name").toString());
    
            QDateTime startDate;
            startDate.setDate(query.value("startDate").toDate());
            startDate.setTime(QTime(0, 0).addSecs(query.value("startTime").toInt()));
            event->setStartDate(startDate);
    
            QDateTime endDate;
            endDate.setDate(query.value("endDate").toDate());
            endDate.setTime(QTime(0, 0).addSecs(query.value("endTime").toInt()));
            event->setEndDate(endDate);
    
            events.append(event);
        }
    
        return events;
    }
    
    /*
        Defines a helper function to open a connection to an
        in-memory SQLITE database and to create a test table.
    */
    void SqlEventModel::createConnection()
    {
        //SQLite version 3 or above
        //defalut connectionName
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName(":memory:"); //based on memory
        if (!db.open()) {
            qFatal("Cannot open database");
            return;
        }
    
        QSqlQuery query;
        // We store the time as seconds because it's easier to query.
        query.exec("create table Event (name TEXT, startDate DATE, startTime INT, endDate DATE, endTime INT)");
        query.exec("insert into Event values('Grocery shopping', '2014-01-01', 36000, '2014-01-01', 39600)");
        query.exec("insert into Event values('Ice skating', '2014-01-01', 57600, '2014-01-01', 61200)");
        query.exec("insert into Event values('Doctor''s appointment', '2014-01-15', 57600, '2014-01-15', 63000)");
        query.exec("insert into Event values('Conference', '2014-01-24', 32400, '2014-01-28', 61200)");
    
        return;
    }
    
  • TestQC1Calendar.qml

  • import QtQuick 2.15
    import QtQuick.Controls 1.4
    import QtQuick.Controls.Styles 1.4
    import QtQuick.Controls.Private 1.0
    
    import TestClasses.QC1.OfficialExampleCalendar 1.0
    
    Rectangle {
        width: 640
        height: 400
        color: "#f4f4f4"
    
        SystemPalette {
            id: systemPalette
        }
    
        SqlEventModel {
            id: eventModel
        }
    
        Flow {
            id: row
            anchors.fill: parent
            anchors.margins: 20
            spacing: 10
            layoutDirection: Qt.RightToLeft
    
            Calendar {
                id: calendar
                width: (parent.width > parent.height ? parent.width * 0.6 - parent.spacing : parent.width)
                height: (parent.height > parent.width ? parent.height * 0.6 - parent.spacing : parent.height)
                frameVisible: true
                weekNumbersVisible: true
                selectedDate: new Date(2014, 0, 1)
                focus: true
    
                style: CalendarStyle {
                    dayDelegate: Item {
                        readonly property color sameMonthDateTextColor: "#444"
                        readonly property color selectedDateColor: Qt.platform.os === "osx" ? "#3778d0" : systemPalette.highlight
                        readonly property color selectedDateTextColor: "white"
                        readonly property color differentMonthDateTextColor: "#bbb"
                        readonly property color invalidDatecolor: "#dddddd"
    
                        Rectangle {
                            anchors.fill: parent
                            border.color: "transparent"
                            color: styleData.date !== undefined && styleData.selected ? selectedDateColor : "transparent"
                            anchors.margins: styleData.selected ? -1 : 0
                        }
    
                        Image {
                            visible: eventModel.eventsForDate(styleData.date).length > 0
                            anchors.top: parent.top
                            anchors.left: parent.left
                            anchors.margins: -1
                            width: 12
                            height: width
                            source: "qrc:/Icons/Used_Images/Icons/10_12used_QC1Calendar_Pinned.png"
                        }
    
                        Label {
                            id: dayDelegateText
                            text: styleData.date.getDate()
                            anchors.centerIn: parent
                            color: {
                                var color = invalidDatecolor;
                                if (styleData.valid) {
                                    // Date is within the valid range.
                                    color = styleData.visibleMonth ? sameMonthDateTextColor : differentMonthDateTextColor;
                                    if (styleData.selected) {
                                        color = selectedDateTextColor;
                                    }
                                }
                                color;
                            }
                        }
                    }
                }
            }
    
            Component {
                id: eventListHeader
    
                Row {
                    id: eventDateRow
                    width: parent.width
                    height: eventDayLabel.height
                    spacing: 10
    
                    Label {
                        id: eventDayLabel
                        text: calendar.selectedDate.getDate()
                        font.pointSize: 35
                    }
    
                    Column {
                        height: eventDayLabel.height
    
                        Label {
                            readonly property var options: { weekday: "long" }
                            text: Qt.locale().standaloneDayName(calendar.selectedDate.getDay(), Locale.LongFormat)
                            font.pointSize: 18
                        }
                        Label {
                            text: Qt.locale().standaloneMonthName(calendar.selectedDate.getMonth())
                                  + calendar.selectedDate.toLocaleDateString(Qt.locale(), " yyyy")
                            font.pointSize: 12
                        }
                    }
                }
            }
    
            Rectangle {
                width: (parent.width > parent.height ? parent.width * 0.4 - parent.spacing : parent.width)
                height: (parent.height > parent.width ? parent.height * 0.4 - parent.spacing : parent.height)
                border.color: Qt.darker(color, 1.2)
    
                ListView {
                    id: eventsListView
                    spacing: 4
                    clip: true
                    header: eventListHeader
                    anchors.fill: parent
                    anchors.margins: 10
                    model: eventModel.eventsForDate(calendar.selectedDate)
    
                    delegate: Rectangle {
                        width: eventsListView.width
                        height: eventItemColumn.height
                        anchors.horizontalCenter: parent.horizontalCenter
    
                        Image {
                            anchors.top: parent.top
                            anchors.topMargin: 4
                            width: 12
                            height: width
                            source: "qrc:/Icons/Used_Images/Icons/10_12used_QC1Calendar_Pinned.png"
                        }
    
                        Rectangle {
                            width: parent.width
                            height: 1
                            color: "#eee"
                        }
    
                        Column {
                            id: eventItemColumn
                            anchors.left: parent.left
                            anchors.leftMargin: 20
                            anchors.right: parent.right
                            height: timeLabel.height + nameLabel.height + 8
    
                            Label {
                                id: nameLabel
                                width: parent.width
                                wrapMode: Text.Wrap
                                text: modelData.name
                            }
                            Label {
                                id: timeLabel
                                width: parent.width
                                wrapMode: Text.Wrap
                                text: modelData.startDate.toLocaleTimeString(calendar.locale, Locale.ShortFormat)
                                color: "#aaa"
                            }
                        }
                    }
                }
            }
        }
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1942305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

资产拆分、资产分割的操作,事务代码ABUMN

在公司常见的业务运行中可能会有这样的场景&#xff1a;资产A 需要拆分成资产B 和 C。这个时候就需要使用到资产分割或者资产转移的操作 &#xff0c;事务代码ABUMN。 我司的实际业务场景是这样的&#xff0c;当初想分别入账给A和B的资产。一年之后发现&#xff0c;当时操作错误…

高清录屏无压力,这四款软件助你轻松搞定

现在不论是教育、娱乐还是工作电脑怎么录屏都成为这些领域里不可或缺的一部分。掌握录屏软件&#xff0c;也能成为个人的软实力之一哦&#xff0c;下面我介绍几款可以快速上手的录屏软件来为你增加实力。 1、福晰REC大师 这款软件我是觉得他是我最快上手的一个工具&#xff0…

Unity UGUI 之 Dropdown

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.Dropdown是什么 下拉列表 2.重要参数 首先这些参数和Button差不多&#xff0c;不过多…

昇思MindSpore学习入门-格式转换

MindSpore中可以把用于训练网络模型的数据集&#xff0c;转换为MindSpore特定的格式数据&#xff08;MindSpore Record格式&#xff09;&#xff0c;从而更加方便地保存和加载数据。其目标是归一化用户的数据集&#xff0c;并进一步通过MindDataset接口实现数据的读取&#xff…

基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)

基于微信小程序SpringBootVue的校园自助打印系统(带1w文档) 基于微信小程序SpringBootVue的校园自助打印系统(带1w文档) 管理信息可以处理复杂的信息从而提高用户的工作效率&#xff0c;减少失误。所以本基于Vue和微信小程序的校园自助打印系统的开发非常有意义&#xff0c;本系…

科研绘图系列:R语言TCGA分组饼图(multiple pie charts)

介绍 在诸如癌症基因组图谱(TCGA)等群体研究项目中,为了有效地表征和比较不同群体的属性分布,科研人员广泛采用饼图作为数据可视化的工具。饼图通过将一个完整的圆形划分为若干个扇形区域,每个扇形区域的面积大小直接对应其代表的属性在整体中的占比。这种图形化的展示方…

react入门到实战-day2-7.21

昨天晚上刚学完已经一点了&#xff0c;来不及写笔记&#xff0c;主要是想睡觉哈&#xff0c;所以今天补上&#xff0c;我发现效率还挺高的&#xff0c;今天重新做笔记&#xff0c;加固了昨天的知识点&#xff0c;要不以后都这样子哈&#xff0c;学完第二天再写哈&#xff0c;要…

【MSPM0G3507】CCS-Sysconfig配置 按键控制LED(二)

1.相关配置 主控&#xff1a;MSPM0G3507编译环境&#xff1a;CCS 2.板子以及原理图 3.Sysconfig配置 LED配置一样 按键为INPUT DL_GPIO_readPins(GPIO_SWITCHES_PORT, GPIO_SWITCHES_USER_1_PIN)// 读取端口状态类型为uint32_t &#xff0c;返回的是对应引脚的状态位。比如…

react中组件间的通信

一、父传子 1.代码展示 import React, { useState } from react;function SonPage(props){ // 子组件const {msg} propsreturn (<div>我是子组件 {msg}</div>) }function App() { // 父组件const [msgText,setMsgText] useState(父传子)return (<div classN…

四、GD32 MCU 常见外设介绍 (5) TIMER 模块介绍

5.1.TIMER 基础知识 TIMER分高级定时器&#xff0c;通用定时器L0&#xff0c;L1&#xff0c;L2和基本定时器。 5.2.硬件连接说明 TIMER 属于片内外设&#xff0c;对于外部硬件设计&#xff0c;只需要单独IO口外接信号线即可。 5.3.GD32 TIMER 外设原理简介&#xff08;以 G…

wsl –install 遇到灾难性故障

windows10 使用wsl 安装Linux系统遇到&#xff1a;灾难性故障 解决办法

VideoAgent: Long-form Video Understanding with Large Language Model as Agent

VideoAgent: Long-form Video Understanding with Large Language Model as Agent 基本信息 博客贡献人 燕青 作者 Xiaohan Wang, Yuhui Zhang, et al. 标签 Large Language Model Agent, Long-form Video Understanding, Vision-Language Foundation Models 摘要 长视…

【Drone】drone编译web端 防墙策略 | 如何在被墙的状态drone顺利编译npm

一、drone编译防墙版本 1、web端drone kind: pipeline type: docker name: ui steps:- name: build_projectimage: node:20-slim depends_on: [clone]volumes:- name: node_modulespath: /drone/src/node_modulescommands:- pwd- du -sh *- npm config set registry https://…

Anaconda下安装配置Jupyter

Anaconda下安装配置Jupyter 1、安装 conda activate my_env #激活虚拟环境 pip install jupyter #安装 jupyter notebook --generate-config #生成配置文件提示配置文件的位置&#xff1a; Writing default config to: /root/.jupyter/jupyter_notebook_config.py检查版本&am…

从PyTorch官方的一篇教程说开去(3.3 - 贪心法)

您的进步和反馈是我最大的动力&#xff0c;小伙伴来个三连呗&#xff01;共勉。 贪心法&#xff0c;可能是大家在处理陌生问题时候&#xff0c;最容易想到的办法了吧&#xff1f; 还记得小时候&#xff0c;国足请了位洋教练发表了一句到现在还被当成段子的话&#xff1a;“如…

用Label Studio,让数据标注变得简单而高效

Label Studio&#xff1a;精准标注&#xff0c;智能模型的起点- 精选真开源&#xff0c;释放新价值。 概览 Label Studio作为数据标注的得力助手&#xff0c;其设计初衷是简化机器学习项目中繁琐的数据准备工作。它提供了一个用户友好的界面&#xff0c;使得即便是非技术用户也…

SpringMVC实现文件上传

导入文件上传相关依赖 <!--文件上传--> <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version> </dependency> <dependency><groupId>…

实现Nginx的反向代理和负载均衡

一、反向代理和负载均衡简介 1.1、反向代理 反向代理(reverse proxy)指:以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。此时代理服务器对外就表现为一个反向代理服务器。 反向代…

【YOLOv10[基础]】热力图可视化实践① | 支持视频热力图 | 密度热力图 | 论文必备

本文将进行添加YOLOv10版本的热力图可视化功能的实践,支持视频的热力图可视化。 目录 一 热力图可视化实践① 1 代码 2 效果图 在论文中经常可以见到提取的物体特征以热力图的形式展示出来,将特征图以热力图的方式进行可视化在深度学习中有以下的原因: ①强调激活区域 ,…

HarmonyOS Next系列之地图组件(Map Kit)使用(九)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…