富文本QTextEdit

news2024/12/24 9:10:41

<1> QTextEdit支持富文本处理,即文档中可使用多种格式,如文字、图片、表格等…
<2> 文档的光标主要基于QTextCursor类,文档的框架主要基于QTextDocument类。
<3> 一个富文本的文档结构主要分为几种元素:框架(QTextFrame)、文本块(QTextBlock)、表格(QTextTable)、和列表(QTextList)
<4> 每种元素的格式有相应的format类表示:框架(QTextFrameFormat)文本块格式(QTextBlockFormat)、表格格式(QTextTableFormat)、列表格式(QTextListFormat)。这些格式通常配合QTextCursor类使用。
<5> QTextEdit类就是一个富文本编辑器,在构建QTextEdit类对象时就已经构建了一个QTextDocument类对象和一个QTextCursor类对象。只需调用他们进行相应的操作即可。
在这里插入图片描述

1–文本边框格式

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //获取文档对象
    QTextDocument *document = ui->textEdit->document();

    //获取根框架
    QTextFrame *rootFrame = document->rootFrame();

    //文档框架格式
    QTextFrameFormat format;
    format.setBorderBrush(Qt::red);//边框颜色
    format.setBorder(3);//边框宽度

    //文档框架设置格式
    rootFrame->setFrameFormat(format);

    //文本边框风格
    QTextFrameFormat frameformat;
    frameformat.setBackground(Qt::lightGray);
    frameformat.setMargin(10);//设置边距
    frameformat.setPadding(15);//设置填衬
    frameformat.setBorder(2);//边界
    frameformat.setBorderStyle(QTextFrameFormat::BorderStyle_Dashed);//边界风格--虚线

    QTextCursor cursor = ui->textEdit->textCursor();
    cursor.insertFrame(frameformat);

在这里插入图片描述

2.文本框格式、文本块格式、字符格式

private slots:
    void showTextFrame();//遍历文档框架
    void showTextBlock();//遍历文本块
    void setTextFont(bool checked);//设置文本字体
void MainWindow::showTextFrame()
{
    //获取文本对象
    QTextDocument *document = ui->textEdit->document();

    //获取跟框架
    QTextFrame *frame = document->rootFrame();

    QTextFrame::iterator it;
    for(it=frame->begin();!(it.atEnd());++it){
        //获取当前指针框架
        QTextFrame *childFrame = it.currentFrame();

        //获取当前文本块
        QTextBlock childBlock = it.currentBlock();
        if(childFrame)
            qDebug() << "frame";
        else if(childBlock.isValid())
            qDebug() << "block" << childBlock.text();
    }
}

void MainWindow::showTextBlock()
{
    //获取文本对象
    QTextDocument *document = ui->textEdit->document();
    //获取头文本块
    QTextBlock block = document->firstBlock();

    //document->blockCount()返回文本块个数
    for(int i = 0; i<document->blockCount(); i++){
        qDebug() << QString("文本块:%1,文本块首行行号为:%2,长度%3,内容%4")
                    .arg(i)
                    .arg(block.firstLineNumber())
                    .arg(block.length())
                    .arg(block.text());
        block = block.next();
    }
}

void MainWindow::setTextFont(bool checked)
{
    if(checked){
        //获取游标
        QTextCursor cursor = ui->textEdit->textCursor();

        //文本块格式
        QTextBlockFormat blockFormat;
        //居中对齐
        blockFormat.setAlignment(Qt::AlignCenter);
        cursor.insertBlock(blockFormat);

        //字符格式
        QTextCharFormat charFormat;
        //字符背景色
        charFormat.setBackground(Qt::lightGray);
        //设置前景色
        charFormat.setForeground(Qt::blue);
        //字体
        charFormat.setFont(QFont(QString("宋体"),12,QFont::Bold,true));
        //下划线
        charFormat.setFontUnderline(true);

        //设置字符格式
        cursor.setCharFormat(charFormat);
        cursor.insertText("嘻嘻嘻嘻嘻嘻嘻");

    }
}

 QAction *action_textFrame = new QAction("框架",this);
    connect(action_textFrame,&QAction::triggered,this,&MainWindow::showTextFrame);
    ui->mainToolBar->addAction(action_textFrame);

    QAction *action_block = new QAction("文本块",this);
    connect(action_block,&QAction::triggered,this,&MainWindow::showTextBlock);
    ui->mainToolBar->addAction(action_block);

    QAction *action_font = new QAction("字体",this);
    action_font->setCheckable(true);
    connect(action_font,&QAction::triggered,this,&MainWindow::setTextFont);
    ui->mainToolBar->addAction(action_font);

在这里插入图片描述

3.文档插入表格、列表、图片

private slots:
	void insertTable();//插入表格
    void insertList();//插入列表
    void insertImage();//插入图片
//插入表格
void MainWindow::insertTable()
{
    QTextCursor cursor = ui->textEdit->textCursor();
    QTextTableFormat format;//表格格式
    format.setCellSpacing(2);//表格外边白
    format.setCellPadding(5);//表格内边白
    cursor.insertTable(4,4,format);
}

//插入表格
void MainWindow::insertList()
{
    QTextListFormat format;//列表格式
    format.setStyle(QTextListFormat::ListDecimal);//数字编码
    ui->textEdit->textCursor().insertList(format);
}

//插入图片
void MainWindow::insertImage()
{
    QString filePath = QFileDialog::getOpenFileName(this,
                                                    "选择图片",
                                                    ".",
                                                    "PNG(*.png);;"
                                                    "JPEG(*.jpg *.jpeg);;"
                                                    "GIF(.gif)");
    QUrl url(QString("file://%1").arg(filePath));
    QImage image = QImageReader(filePath).read();

    QTextDocument *document = ui->textEdit->document();
    //文档添加图片资源
    document->addResource(QTextDocument::ImageResource,url,QVariant(image));

    QTextCursor cursor = ui->textEdit->textCursor();

    QTextImageFormat format;
    format.setWidth(image.width());
    format.setHeight(image.height());
    format.setName(url.toString());
    cursor.insertImage(format);
}
 QAction *action_table = new QAction("表格",this);
    QAction *action_list = new QAction("列表",this);
    QAction *action_image = new QAction("图片",this);

    connect(action_table,&QAction::triggered,this,&MainWindow::insertTable);
    connect(action_list,&QAction::triggered,this,&MainWindow::insertList);
    connect(action_image,&QAction::triggered,this,&MainWindow::insertImage);

    ui->mainToolBar->addAction(action_table);
    ui->mainToolBar->addAction(action_list);
    ui->mainToolBar->addAction(action_image);

在这里插入图片描述

4.语法高亮功能(设置关键字变色)

#include<QSyntaxHighlighter>

class mySyntaxHighLighter : public QSyntaxHighlighter
{
    Q_OBJECT
public:
    mySyntaxHighLighter(QTextDocument *parent = 0);

protected:
    //重写次方法
    void highlightBlock(const QString &text);
};

#include "mysyntaxhighlighter.h"

mySyntaxHighLighter::mySyntaxHighLighter(QTextDocument *parent):QSyntaxHighlighter(parent)
{

}

void mySyntaxHighLighter::highlightBlock(const QString &text)
{
    QTextCharFormat format;//字符格式
    format.setFontWeight(QFont::Bold);//加粗
    format.setBackground(Qt::blue);
    format.setForeground(Qt::red);

    QString patter = "\\bgood\\b";//匹配单词边界
    QRegExp expression(patter);
    int index = text.indexOf(expression);
    while(index >= 0){
        int length = expression.matchedLength();
        setFormat(index,length,format);
        index = text.indexOf(expression,index + length);
    }
}
private://.h中
    mySyntaxHighLighter *m_sLinghter;
//语法高亮 .cpp中
    m_sLinghter = new mySyntaxHighLighter(ui->textEdit->document());

在这里插入图片描述

5.查找功能

private slots:
	void textFind();//找查文本
    void textNext();//找查下一个
private:
    QLineEdit *m_lineEdit;
    QDialog *m_findDialog;
void MainWindow::textFind()
{
    m_findDialog->show();
}

void MainWindow::textNext()
{
    QString str = m_lineEdit->text();
    bool isFind = ui->textEdit->find(str,QTextDocument::FindBackward);
    if(isFind){
        qDebug() << QString("行号:%1,列好:%2")
                    .arg(ui->textEdit->textCursor().blockNumber())
                    .arg(ui->textEdit->textCursor().columnNumber());
    }
}
//查找
    QAction *action_textfind = new QAction("找查",this);
    connect(action_textfind,&QAction::triggered,this,&MainWindow::textFind);
    ui->mainToolBar->addAction(action_textfind);

    m_findDialog = new QDialog(this);//查找对话框
    m_lineEdit = new QLineEdit(m_findDialog);//查找输入框
    QPushButton *btn = new QPushButton(m_findDialog);
    btn->setText("查找下一个");
    connect(btn,&QPushButton::clicked,this,&MainWindow::textNext);
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(m_lineEdit);
    layout->addWidget(btn);
    m_findDialog->setLayout(layout);

在这里插入图片描述

6.代码总和

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include"mysyntaxhighlighter.h"
#include<QLineEdit>
#include<QDialog>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void showTextFrame();//遍历文档框架
    void showTextBlock();//遍历文本块
    void setTextFont(bool checked);//设置文本字体
    void insertTable();//插入表格
    void insertList();//插入列表
    void insertImage();//插入图片
    void textFind();//找查文本
    void textNext();//找查下一个

private:
    Ui::MainWindow *ui;
    mySyntaxHighLighter *m_sLinghter;
    QLineEdit *m_lineEdit;
    QDialog *m_findDialog;
};

#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QTextFrame>
#include<QDebug>
#include<QFileDialog>
#include<QImageReader>
#include<QPushButton>
#include<QLineEdit>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //获取文档对象
    QTextDocument *document = ui->textEdit->document();

    //获取根框架
    QTextFrame *rootFrame = document->rootFrame();

    //文档框架格式
    QTextFrameFormat format;
    format.setBorderBrush(Qt::red);//边框颜色
    format.setBorder(3);//边框宽度

    //文档框架设置格式
    rootFrame->setFrameFormat(format);

    //文本边框风格
    QTextFrameFormat frameformat;
    frameformat.setBackground(Qt::lightGray);
    frameformat.setMargin(10);//设置边距
    frameformat.setPadding(15);//设置填衬
    frameformat.setBorder(2);//边界
    frameformat.setBorderStyle(QTextFrameFormat::BorderStyle_Dashed);//边界风格--虚线

    QTextCursor cursor = ui->textEdit->textCursor();
    cursor.insertFrame(frameformat);

    QAction *action_textFrame = new QAction("框架",this);
    connect(action_textFrame,&QAction::triggered,this,&MainWindow::showTextFrame);
    ui->mainToolBar->addAction(action_textFrame);

    QAction *action_block = new QAction("文本块",this);
    connect(action_block,&QAction::triggered,this,&MainWindow::showTextBlock);
    ui->mainToolBar->addAction(action_block);

    QAction *action_font = new QAction("字体",this);
    action_font->setCheckable(true);
    connect(action_font,&QAction::triggered,this,&MainWindow::setTextFont);
    ui->mainToolBar->addAction(action_font);

    QAction *action_table = new QAction("表格",this);
    QAction *action_list = new QAction("列表",this);
    QAction *action_image = new QAction("图片",this);

    connect(action_table,&QAction::triggered,this,&MainWindow::insertTable);
    connect(action_list,&QAction::triggered,this,&MainWindow::insertList);
    connect(action_image,&QAction::triggered,this,&MainWindow::insertImage);

    ui->mainToolBar->addAction(action_table);
    ui->mainToolBar->addAction(action_list);
    ui->mainToolBar->addAction(action_image);

    //语法高亮
    m_sLinghter = new mySyntaxHighLighter(ui->textEdit->document());

    //查找
    QAction *action_textfind = new QAction("找查",this);
    connect(action_textfind,&QAction::triggered,this,&MainWindow::textFind);
    ui->mainToolBar->addAction(action_textfind);

    m_findDialog = new QDialog(this);//查找对话框
    m_lineEdit = new QLineEdit(m_findDialog);//查找输入框
    QPushButton *btn = new QPushButton(m_findDialog);
    btn->setText("查找下一个");
    connect(btn,&QPushButton::clicked,this,&MainWindow::textNext);
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(m_lineEdit);
    layout->addWidget(btn);
    m_findDialog->setLayout(layout);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::showTextFrame()
{
    //获取文本对象
    QTextDocument *document = ui->textEdit->document();

    //获取跟框架
    QTextFrame *frame = document->rootFrame();

    QTextFrame::iterator it;
    for(it=frame->begin();!(it.atEnd());++it){
        //获取当前指针框架
        QTextFrame *childFrame = it.currentFrame();

        //获取当前文本块
        QTextBlock childBlock = it.currentBlock();
        if(childFrame)
            qDebug() << "frame";
        else if(childBlock.isValid())
            qDebug() << "block" << childBlock.text();
    }
}

void MainWindow::showTextBlock()
{
    //获取文本对象
    QTextDocument *document = ui->textEdit->document();
    //获取头文本块
    QTextBlock block = document->firstBlock();

    //document->blockCount()返回文本块个数
    for(int i = 0; i<document->blockCount(); i++){
        qDebug() << QString("文本块:%1,文本块首行行号为:%2,长度%3,内容%4")
                    .arg(i)
                    .arg(block.firstLineNumber())
                    .arg(block.length())
                    .arg(block.text());
        block = block.next();
    }
}

void MainWindow::setTextFont(bool checked)
{
    if(checked){
        //获取游标
        QTextCursor cursor = ui->textEdit->textCursor();

        //文本块格式
        QTextBlockFormat blockFormat;
        //居中对齐
        blockFormat.setAlignment(Qt::AlignCenter);
        cursor.insertBlock(blockFormat);

        //字符格式
        QTextCharFormat charFormat;
        //字符背景色
        charFormat.setBackground(Qt::lightGray);
        //设置前景色
        charFormat.setForeground(Qt::blue);
        //字体
        charFormat.setFont(QFont(QString("宋体"),12,QFont::Bold,true));
        //下划线
        charFormat.setFontUnderline(true);

        //设置字符格式
        cursor.setCharFormat(charFormat);
        cursor.insertText("嘻嘻嘻嘻嘻嘻嘻");

    }
}

//插入表格
void MainWindow::insertTable()
{
    QTextCursor cursor = ui->textEdit->textCursor();
    QTextTableFormat format;//表格格式
    format.setCellSpacing(2);//表格外边白
    format.setCellPadding(5);//表格内边白
    cursor.insertTable(4,4,format);
}

//插入表格
void MainWindow::insertList()
{
    QTextListFormat format;//列表格式
    format.setStyle(QTextListFormat::ListDecimal);//数字编码
    ui->textEdit->textCursor().insertList(format);
}

//插入图片
void MainWindow::insertImage()
{
    QString filePath = QFileDialog::getOpenFileName(this,
                                                    "选择图片",
                                                    ".",
                                                    "PNG(*.png);;"
                                                    "JPEG(*.jpg *.jpeg);;"
                                                    "GIF(.gif)");
    QUrl url(QString("file://%1").arg(filePath));
    QImage image = QImageReader(filePath).read();

    QTextDocument *document = ui->textEdit->document();
    //文档添加图片资源
    document->addResource(QTextDocument::ImageResource,url,QVariant(image));

    QTextCursor cursor = ui->textEdit->textCursor();

    QTextImageFormat format;
    format.setWidth(image.width());
    format.setHeight(image.height());
    format.setName(url.toString());
    cursor.insertImage(format);


}

void MainWindow::textFind()
{
    m_findDialog->show();
}

void MainWindow::textNext()
{
    QString str = m_lineEdit->text();
    bool isFind = ui->textEdit->find(str,QTextDocument::FindBackward);
    if(isFind){
        qDebug() << QString("行号:%1,列好:%2")
                    .arg(ui->textEdit->textCursor().blockNumber())
                    .arg(ui->textEdit->textCursor().columnNumber());
    }
}

mySyntaxHighLighter.h

#ifndef MYSYNTAXHIGHLIGHTER_H
#define MYSYNTAXHIGHLIGHTER_H
#include<QSyntaxHighlighter>

class mySyntaxHighLighter : public QSyntaxHighlighter
{
    Q_OBJECT
public:
    mySyntaxHighLighter(QTextDocument *parent = 0);

protected:
    //重写次方法
    void highlightBlock(const QString &text);
};

#endif // MYSYNTAXHIGHLIGHTER_H

mySyntaxHighLighter.cpp

#include "mysyntaxhighlighter.h"

mySyntaxHighLighter::mySyntaxHighLighter(QTextDocument *parent):QSyntaxHighlighter(parent)
{

}

void mySyntaxHighLighter::highlightBlock(const QString &text)
{
    QTextCharFormat format;//字符格式
    format.setFontWeight(QFont::Bold);//加粗
    format.setBackground(Qt::blue);
    format.setForeground(Qt::red);

    QString patter = "\\bgood\\b";//匹配单词边界
    QRegExp expression(patter);
    int index = text.indexOf(expression);
    while(index >= 0){
        int length = expression.matchedLength();
        setFormat(index,length,format);
        index = text.indexOf(expression,index + length);
    }
}

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

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

相关文章

公司只有我一个测试人员...也没有朋友经验可以借鉴,我该怎么办?

近日看到一个帖子&#xff1a; 我所在的公司目前就我一个测试&#xff0c;我一个人对接开发&#xff0c;对接产品&#xff0c;公司也没什么流程&#xff0c;我不知道我该做什么&#xff0c;也没有前人经验可以借鉴&#xff0c;我该怎么办&#xff1f; 看到有很多刚刚步入测试行…

报名成人学历,还有没有必要申请学士学位?

很多同学在报名成人学历的时候并不重视学位证书&#xff0c;认为拿到毕业证就行了。 其实&#xff0c;学位证的重要性有时候真的不亚于毕业证。 别人要求必须双证&#xff0c;你一个毕业证就不顶事了。 下面我们就来了解下学位证的用处&#xff0c;以及三大成人学历提升方式&am…

微服务一 实用篇 - 3. Docker

《微服务一 实用篇 - 3. Docker》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《微服务一 实用篇 - 3. Docker》《微服务一 实用篇 - 3. Docker》1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操…

干货文稿|详解深度半监督学习

分享嘉宾 | 范越文稿整理 | William嘉宾介绍Introduction to Semi-Supervised Learning传统机器学习中的主流学习方法分为监督学习&#xff0c;无监督学习和半监督学习。这里存在一个是问题是为什么需要做半监督学习&#xff1f;首先是希望减少标注成本&#xff0c;因为目前可以…

软件测试自动化Java篇【Selenium+Junit 5】

文章目录Selenium环境部署自动化测试例子常见的元素操作窗口等待浏览器的操作弹窗选择器执行脚本文件上传浏览器参数Junit 5导入依赖Junit 4 和 Junit5 注解对比断言测试顺序参数化单参数多参数动态参数测试套件指定类来运行测试用例指定包名来运行包下测试用例Selenium 为什么…

【线程安全篇】

线程安全之原子性问题 x &#xff0c;在字节码文件中对应多个指令&#xff0c;多个线程在运行多个指令时&#xff0c;就存在原子性、可见性问题 赋值 多线程场景下&#xff0c;一个指令如果包含多个字节码指令&#xff0c;那么就不再是原子操作。因为赋值的同时&#xff0c…

智慧工地AI视频分析系统 opencv

智慧工地AI视频分析系统通过pythonopencv网络模型图像识别技术&#xff0c;智慧工地AI视频分析算法自动识别现场人员穿戴是否合规。本算法模型中用到opencv技术&#xff0c;OpenCV基于C实现&#xff0c;同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Pyth…

研讨会回顾 | Perforce版本控制工具Helix Core入华十年,携手龙智赋能企业大规模研发

2023年2月28日&#xff0c;龙智联合全球领先的数字资产管理工具厂商Perforce共同举办Perforce on Tour网络研讨会&#xff0c;主题为“赋能‘大’研发&#xff0c;助力‘快’交付”。 作为Perforce Helix Core产品在中国地区的唯一授权合作伙伴&#xff0c;龙智董事长何明女士为…

六、GoF之工厂模式

设计模式&#xff1a;一种可以被重复利用的解决方案。 GoF&#xff08;Gang of Four&#xff09;&#xff0c;中文名——四人组。 《Design Patterns: Elements of Reusable Object-Oriented Software》&#xff08;即《设计模式》一书&#xff09;&#xff0c;1995年由 Eric…

Sidecar-详解 JuiceFS CSI Driver 新模式

近期发布的 JuiceFS CSI Driver v0.18 版本中&#xff0c;我们提供了一种全新的方式访问文件系统&#xff0c;即 JuiceFS 客户端以 Sidecar 方式运行于应用 Pod 中&#xff0c;且客户端与应用同生命周期。 这个全新的功能将帮助用户在 Serverless Kubernetes 环境中使用 Juice…

【Python每日一练】总目录(不断更新中...)

Python 2023.03 20230303 1. 两数之和 ★ 2. 组合总和 ★★ 3. 相同的树 ★★ 20230302 1. 字符串统计 2. 合并两个有序链表 3. 下一个排列 20230301 1. 只出现一次的数字 2. 以特殊格式处理连续增加的数字 3. 最短回文串 Python 2023.02 20230228 1. 螺旋矩阵 …

基于k3s部署KubeSphere

目录相关文档准备工作安装K3S安装KubeSphere相关文档 k3s官网&#xff1a;https://docs.k3s.io/zh/quick-start k3s所有版本查看&#xff1a;https://github.com/k3s-io/k3s/tags kubesphere文档&#xff1a;https://kubesphere.io/zh/docs/v3.3/quick-start/minimal-kubesp…

2023爱分析·RPA软件市场厂商评估报告:容智信息

目录 1. 研究范围定义 2. RPA软件市场分析 3. 厂商评估&#xff1a;容智信息 4. 入选证书 1. 研究范围定义 RPA即Robotic Process Automation&#xff08;机器人流程自动化&#xff09;&#xff0c;是一种通过模拟人与软件系统的交互过程&#xff0c;实现由软件机器人…

【python+selenium自动化测试实战项目】全面、完整、详细

今天整理一下实战项目的代码共大家学习。 不说废话&#xff0c;直接上项目 项目简介 项目名称&#xff1a;**公司电子零售会员系统 项目目的&#xff1a;实现电子零售会员系统项目自动化测试执行 项目版本&#xff1a;v1.0 项目目录 项目环境 本版 python 36 pip insat…

Linux开放的端口太多了?教你一招找出所有开放的端口,然后直接干掉!

基于服务器安全性维护的目的&#xff0c;查看所有开放的端口是通常采取的第一步&#xff0c;从中检查出可疑或者不必要的端口并将其关掉。关于查看开放的端口&#xff0c;方法不止一种&#xff0c;比如lsof 命令&#xff0c;还可以使用 ss 命令。 查看开放的端口 今天我们就介…

分布式缓存 Memcached Linux 系统安装

1.Memcached简介 Memcached是一个开源、高性能&#xff0c;将数据分布于内存中并使用key-value存储结构的缓存系统。它通过在内存中缓存数据来减少向数据库的频繁访问连接的次数&#xff0c;可以提高动态、数据库驱动之类网站的运行速度。 Memcached在使用是比较简单的&#…

Clip:学习笔记

Clip 文章目录Clip前言一、原理1.1 摘要1.2 引言1.3 方法1.4 实验1.4.1 zero-shot Transfer1.4.2 PROMPT ENGINEERING AND ENSEMBLING1.5 局限性二、总结前言 阅读论文&#xff1a; Learning Transferable Visual Models From Natural Language Supervision CLIP 论文逐段精读…

只需4步,让OKA40i-C开发板的Linux系统拥有中文显示

如果你试着在Linux系统里面输入中文&#xff0c;那么将会有一片乱码呈现在你面前&#xff0c;这是因为Linux系统的默认语言是英文。但是如果可以显示中文的话&#xff0c;那么在使用过程中的便利程度一定会大大提升。今天小编就通过飞凌嵌入式的OKA40i-C开发板来为大家演示让Li…

极狐GitLab DevSecOps 为企业许可证安全合规保驾护航

本文来自&#xff1a; 小马哥 极狐(GitLab) 技术布道师 开源许可证是开源软件的法律武器&#xff0c;是第三方正确使用开源软件的安全合规依据。 根据 Linux 发布的 SBOM 报告显示&#xff0c;98% 的企业都在使用开源软件&#xff08;中文版报告详情&#xff09;。随着开源使用…

微电影广告有哪些传播优势?

微电影广告是在基于微电影的模式下发展而来的&#xff0c;是伴随着当下快节奏、碎片化的生活方式而诞生的新兴广告表现形式。微电影广告凭借其具备的独特传播优势以及时代特征成为广大企业主塑造企业品牌形象的主要方式。那么&#xff0c;微电影广告究竟有哪些传播优势&#xf…