【Qt控件之QLineEdit】N多种用法及技巧

news2024/11/14 11:34:48

【Qt控件之QLineEdit】N多种用法及技巧

      • 介绍
      • 用法
        • 用法1:信号触发
      • 用法2:添加动作
      • 用法3:删除光标最侧字符
      • 用法4:设置光标位置
      • 用法5:删除
      • 用法6:选择和取消选择
      • 用法7:不为空时是否显示清除按钮
      • 用法8:设置自动补全
      • 用法9:设置显示模式
      • 用法11:是否显示边框
      • 用法12:掩码输入
      • 用法13:设置最大长度
      • 用法14:设置编辑状态
      • 用法15:设置占位符
      • 用法16:是否只读
      • 用法17:选择文本
      • 示例
        • 示例1:设置验证器(正则表达式:限制只可输入`数字` `英文`和`下划线`)
        • 示例2:设置`显示模式`、`验证器`、`文本位置`、`掩码`和`是否只读`

介绍

QLineEdit是一个单行文本输入框,允许用户输入和编辑单行纯文本。
它提供了很多有用的编辑功能,包括撤销和重做、剪切和粘贴、以及拖放等。
同时,QLineEdit还可以通过改变void setEchoMode(EchoMode)来进行密码输入等操作,文本的长度也可以被限制为maxLength
此外,通过使用setValidator()或者setInputMask()可以限制QLineEdit输入的文本类型。

用法

QLineEdit类方法有很多,以下是其常用用法。

用法1:信号触发
	// 当光标的位置在文本编辑器中改变时,这个信号会被触发。old和new参数分别表示光标改变前后的位置。
    connect(ui->lineEdit, &QLineEdit::cursorPositionChanged, this, [=](int nOld, int nNew){
        qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "nOld :" << nOld << "nNew :" << nNew;
    });
	// 当用户完成文本编辑(例如按下Enter键或点击其他区域使编辑结束)时,这个信号会被触发。
    connect(ui->lineEdit, &QLineEdit::editingFinished, this, [=](){
        qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "text :" << ui->lineEdit->text();
    });
	// 当用户在文本编辑器中按下Enter键时,这个信号会被触发。
    connect(ui->lineEdit, &QLineEdit::returnPressed, this,  [=](){
        qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "text :" << ui->lineEdit->text();
    });
	// 当文本编辑器中的选区发生变化时,这个信号会被触发。例如,当用户选择或取消选择文本时。
    connect(ui->lineEdit, &QLineEdit::selectionChanged, this,  [=](){
        qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "text :" << ui->lineEdit->text();
    });
	// 当文本编辑器中的文本发生更改时,这个信号会被触发。参数text是改变后的文本内容。
    connect(ui->lineEdit, &QLineEdit::textChanged, this,  [=](const QString& text){
        qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "text :" << text;
    });
	// 当文本编辑器开始编辑新的文本时,这个信号会被触发。参数text是当前编辑的文本内容。
    connect(ui->lineEdit, &QLineEdit::textEdited, this,  [=](const QString& text){
        qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "text :" << text;
    });

这些函数通常在特定的场合和情境下使用,例如在实现自定义的文本编辑器或创建复杂的用户界面时。
可以根据需要连接这些信号到自定义的槽函数,以处理特定的用户输入事件。

用法2:添加动作

可在编辑框内添加自定义动作,进行处理。

	// 创建动作,图标为库标准图标
    QAction* pAct = new QAction(style()->standardIcon(QStyle::SP_DialogOpenButton), "open", this);
    connect(pAct, &QAction::triggered, this, [=](){
       ui->lineEdit->setText("haha");
    });
    // 添加动作1,第二个参数为所在位置,当前是在编辑框后边
    ui->lineEdit->addAction(pAct, QLineEdit::TrailingPosition);
    // 添加动作2,位置在编辑框开始
    ui->lineEdit->addAction(style()->standardIcon(QStyle::SP_DialogOpenButton), QLineEdit::LeadingPosition);

界面如下:
在这里插入图片描述

用法3:删除光标最侧字符

如果没有选择任何文本,则删除文本光标左侧的字符,并将光标向左移动一个位置。如果选择了任何文本,则光标将移动到所选文本的开头并删除所选文本。

ui->lineEdit->backspace();

用法4:设置光标位置

设置光标位置

ui->lineEdit->setCursorPosition(3);

将文本光标移动到行首,除非它已经在行首。如果mark为true,则向第一个位置选择文本;否则,如果移动光标,则将取消选中所选文本。

ui->lineEdit->home(true);

将光标移回步进字符。如果mark为真,移动的每个字符将被添加到选择中;如果标记为假,则清除选择。

ui->lineEdit->cursorBackward(false, 2);

将光标向前移动字符。如果mark为真,移动的每个字符将被添加到选择中;如果标记为假,则清除选择。

ui->lineEdit->cursorForward(false, 1);

用法5:删除

如果未选中任何文本,则删除文本光标右侧的字符。如果选择了任何文本,则光标将移动到所选文本的开头并删除所选文本。

ui->lineEdit->del();

用法6:选择和取消选择

取消选择任何选定的文本。

ui->lineEdit->deselect();

用法7:不为空时是否显示清除按钮

此属性用于确定行编辑器在不为空时是否显示清除按钮。
如果启用,当行编辑包含一些文本时,该行编辑将显示一个后面的清除按钮,否则行编辑将不显示清除按钮(默认值)。

ui->lineEdit->setClearButtonEnabled(1);

用法8:设置自动补全

void QLineEdit::setCompleter(QCompleter *c)
设置这个行编辑器来提供自动补全,c.补全模式使用QCompleter::setCompletionMode()设置。
要将QCompleter与QValidator或QLineEdit::inputMask一起使用,您需要确保提供给QCompleter的模型包含有效的条目。您可以使用QSortFilterProxyModel来确保QCompleter的模型只包含有效的条目。
如果c == 0, setCompleter()将移除当前的补全器,有效地禁用自动补全。

    QStringList wordList;
    wordList << "alpha" << "omega" << "omicron" << "zeta";

    QCompleter *completer = new QCompleter(wordList, this);
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    ui->lineEdit->setCompleter(completer);

在这里插入图片描述

用法9:设置显示模式

显示模式:enum EchoMode { Normal, NoEcho, Password, PasswordEchoOnEdit };
此属性保存行编辑器的回显模式
回显模式决定如何向用户显示(或回显)行编辑中输入的文本。
最常见的设置是Normal,其中用户输入的文本逐字显示,但QLineEdit也支持允许输入的文本被抑制或遮挡的模式:这些模式包括NoEcho, PasswordPasswordEchoOnEdit
该设置会影响小部件的显示以及复制或拖动文本的能力。
默认情况下,此属性设置为Normal

ui->lineEdit->setEchoMode(QLineEdit::Password);

在这里插入图片描述

用法11:是否显示边框

ui->lineEdit->setFrame(1);

用法12:掩码输入

此属性保存验证输入掩码

如果没有设置掩码,inputMask()返回一个空字符串。

设置QLineEdit的验证掩码。验证器可以代替掩码使用,也可以与掩码一起使用;看到setValidator()

通过传递一个空字符串(“”),取消掩码并返回到正常的QLineEdit操作。

下表显示了可以在输入掩码中使用的字符。在允许但不需要字符的情况下,需要使用空格字符(表示空白的默认字符)。

ui->lineEdit->setInputMask("000.000.000.000");

在这里插入图片描述

用法13:设置最大长度

中文,英文都占1个长度。

ui->lineEdit->setMaxLength(10);

用法14:设置编辑状态

此属性保存行编辑器的内容是否已被用户修改

修改后的标志永远不会被QLineEdit读取;它的默认值为false,并在用户更改行编辑器的内容时更改为true

这对于需要提供默认值但一开始不知道默认值应该是什么(可能取决于表单上的其他字段)的东西很有用。在没有最佳默认值的情况下开始行编辑,当默认值已知时,如果modified()返回false(用户没有输入任何文本),则插入默认值。

调用setText()将修改标志重置为false。

ui->lineEdit->setModified(1);

用法15:设置占位符

ui->lineEdit->setPlaceholderText("helloworld");

在这里插入图片描述

用法16:是否只读

ui->lineEdit->setReadOnly(1);

用法17:选择文本

ui->lineEdit->setSelection(0, 2);

示例

示例1:设置验证器(正则表达式:限制只可输入数字 英文下划线
ui->lineEdit->setValidator(new QRegularExpressionValidator(QRegularExpression("[0-9a-zA-A_]*")));
示例2:设置显示模式验证器文本位置掩码是否只读

先上UI:
根据选择,设置编辑框状态及可输入限制,代码内有注释。
在这里插入图片描述
.h

#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>

QT_BEGIN_NAMESPACE
class QComboBox;
class QLineEdit;
QT_END_NAMESPACE

//! [0]
class Window : public QWidget
{
    Q_OBJECT

public:
    Window();

public slots:
    // 显示改变
    void echoChanged(int);
    // 验证器选择改变
    void validatorChanged(int);
    // 位置改变
    void alignmentChanged(int);
    // 掩码改变
    void inputMaskChanged(int);
    // 访问方式
    void accessChanged(int);

private:
    QLineEdit *echoLineEdit;        // 显示
    QLineEdit *validatorLineEdit;   // 验证器
    QLineEdit *alignmentLineEdit;   // 文本位置
    QLineEdit *inputMaskLineEdit;   // 掩码
    QLineEdit *accessLineEdit;      // 访问方式
};
//! [0]

#endif

.cpp

#include <QtWidgets>

#include "window.h"

//! [0]
Window::Window()
{
    QGroupBox *echoGroup = new QGroupBox(tr("Echo"));

    QLabel *echoLabel = new QLabel(tr("Mode:"));
    QComboBox *echoComboBox = new QComboBox;
    echoComboBox->addItem(tr("Normal"));
    echoComboBox->addItem(tr("Password"));
    echoComboBox->addItem(tr("PasswordEchoOnEdit"));
    echoComboBox->addItem(tr("No Echo"));

    echoLineEdit = new QLineEdit;
    echoLineEdit->setPlaceholderText("Placeholder Text");
    echoLineEdit->setFocus();
//! [0]

//! [1]
    QGroupBox *validatorGroup = new QGroupBox(tr("Validator"));

    QLabel *validatorLabel = new QLabel(tr("Type:"));
    QComboBox *validatorComboBox = new QComboBox;
    validatorComboBox->addItem(tr("No validator"));
    validatorComboBox->addItem(tr("Integer validator"));
    validatorComboBox->addItem(tr("Double validator"));

    validatorLineEdit = new QLineEdit;
    validatorLineEdit->setPlaceholderText("Placeholder Text");
//! [1]

//! [2]
    QGroupBox *alignmentGroup = new QGroupBox(tr("Alignment"));

    QLabel *alignmentLabel = new QLabel(tr("Type:"));
    QComboBox *alignmentComboBox = new QComboBox;
    alignmentComboBox->addItem(tr("Left"));
    alignmentComboBox->addItem(tr("Centered"));
    alignmentComboBox->addItem(tr("Right"));

    alignmentLineEdit = new QLineEdit;
    alignmentLineEdit->setPlaceholderText("Placeholder Text");
//! [2]

//! [3]
    QGroupBox *inputMaskGroup = new QGroupBox(tr("Input mask"));

    QLabel *inputMaskLabel = new QLabel(tr("Type:"));
    QComboBox *inputMaskComboBox = new QComboBox;
    inputMaskComboBox->addItem(tr("No mask"));
    inputMaskComboBox->addItem(tr("Phone number"));
    inputMaskComboBox->addItem(tr("ISO date"));
    inputMaskComboBox->addItem(tr("License key"));

    inputMaskLineEdit = new QLineEdit;
    inputMaskLineEdit->setPlaceholderText("Placeholder Text");
//! [3]

//! [4]
    QGroupBox *accessGroup = new QGroupBox(tr("Access"));

    QLabel *accessLabel = new QLabel(tr("Read-only:"));
    QComboBox *accessComboBox = new QComboBox;
    accessComboBox->addItem(tr("False"));
    accessComboBox->addItem(tr("True"));

    accessLineEdit = new QLineEdit;
    accessLineEdit->setPlaceholderText("Placeholder Text");
//! [4]

//! [5]
    connect(echoComboBox, SIGNAL(activated(int)),
            this, SLOT(echoChanged(int)));
    connect(validatorComboBox, SIGNAL(activated(int)),
            this, SLOT(validatorChanged(int)));
    connect(alignmentComboBox, SIGNAL(activated(int)),
            this, SLOT(alignmentChanged(int)));
    connect(inputMaskComboBox, SIGNAL(activated(int)),
            this, SLOT(inputMaskChanged(int)));
    connect(accessComboBox, SIGNAL(activated(int)),
            this, SLOT(accessChanged(int)));
//! [5]

//! [6]
    QGridLayout *echoLayout = new QGridLayout;
    echoLayout->addWidget(echoLabel, 0, 0);
    echoLayout->addWidget(echoComboBox, 0, 1);
    echoLayout->addWidget(echoLineEdit, 1, 0, 1, 2);
    echoGroup->setLayout(echoLayout);
//! [6]

//! [7]
    QGridLayout *validatorLayout = new QGridLayout;
    validatorLayout->addWidget(validatorLabel, 0, 0);
    validatorLayout->addWidget(validatorComboBox, 0, 1);
    validatorLayout->addWidget(validatorLineEdit, 1, 0, 1, 2);
    validatorGroup->setLayout(validatorLayout);

    QGridLayout *alignmentLayout = new QGridLayout;
    alignmentLayout->addWidget(alignmentLabel, 0, 0);
    alignmentLayout->addWidget(alignmentComboBox, 0, 1);
    alignmentLayout->addWidget(alignmentLineEdit, 1, 0, 1, 2);
    alignmentGroup-> setLayout(alignmentLayout);

    QGridLayout *inputMaskLayout = new QGridLayout;
    inputMaskLayout->addWidget(inputMaskLabel, 0, 0);
    inputMaskLayout->addWidget(inputMaskComboBox, 0, 1);
    inputMaskLayout->addWidget(inputMaskLineEdit, 1, 0, 1, 2);
    inputMaskGroup->setLayout(inputMaskLayout);

    QGridLayout *accessLayout = new QGridLayout;
    accessLayout->addWidget(accessLabel, 0, 0);
    accessLayout->addWidget(accessComboBox, 0, 1);
    accessLayout->addWidget(accessLineEdit, 1, 0, 1, 2);
    accessGroup->setLayout(accessLayout);
//! [7]

//! [8]
    QGridLayout *layout = new QGridLayout;
    layout->addWidget(echoGroup, 0, 0);
    layout->addWidget(validatorGroup, 1, 0);
    layout->addWidget(alignmentGroup, 2, 0);
    layout->addWidget(inputMaskGroup, 0, 1);
    layout->addWidget(accessGroup, 1, 1);
    setLayout(layout);

    setWindowTitle(tr("Line Edits"));
}
//! [8]

//! [9]
void Window::echoChanged(int index)
{
    switch (index) {
    case 0:
        echoLineEdit->setEchoMode(QLineEdit::Normal);
        break;
    case 1:
        echoLineEdit->setEchoMode(QLineEdit::Password);
        break;
    case 2:
        echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
        break;
    case 3:
        echoLineEdit->setEchoMode(QLineEdit::NoEcho);
    }
}
//! [9]

//! [10]
void Window::validatorChanged(int index)
{
    switch (index) {
    case 0:
        validatorLineEdit->setValidator(0);
        break;
    case 1:
        validatorLineEdit->setValidator(new QIntValidator(
            validatorLineEdit));
        break;
    case 2:
        validatorLineEdit->setValidator(new QDoubleValidator(-999.0,
            999.0, 2, validatorLineEdit));
    }

    validatorLineEdit->clear();
}
//! [10]

//! [11]
void Window::alignmentChanged(int index)
{
    switch (index) {
    case 0:
        alignmentLineEdit->setAlignment(Qt::AlignLeft);
        break;
    case 1:
        alignmentLineEdit->setAlignment(Qt::AlignCenter);
        break;
    case 2:
        alignmentLineEdit->setAlignment(Qt::AlignRight);
    }
}
//! [11]

//! [12]
void Window::inputMaskChanged(int index)
{
    switch (index) {
    case 0:
        inputMaskLineEdit->setInputMask("");
        break;
    case 1:
        inputMaskLineEdit->setInputMask("+99 99 99 99 99;_");
        break;
    case 2:
        inputMaskLineEdit->setInputMask("0000-00-00");
        inputMaskLineEdit->setText("00000000");
        inputMaskLineEdit->setCursorPosition(0);
        break;
    case 3:
        inputMaskLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#");
    }
}
//! [12]

//! [13]
void Window::accessChanged(int index)
{
    switch (index) {
    case 0:
        accessLineEdit->setReadOnly(false);
        break;
    case 1:
        accessLineEdit->setReadOnly(true);
    }
}
//! [13]

调用

#include <QApplication>

#include "window.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Window window;
    window.show();
    return app.exec();
}

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

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

相关文章

2023年江西省职业院校技能大赛网络建设与运维赛项省赛样题

2023年江西省职业院校技能大赛 网络建设与运维赛项省赛样题 竞赛说明&#xff1a; 1.禁止携带和使用移动存储设备、计算器、通信工具及参考资料。 2.请根据大赛所提供的比赛环境&#xff0c;检查所列的硬件设备、软件及文档清单、材料清单是否齐全&#xff0c;计算机设备是否能…

Java实验一编程环境使用

1&#xff0e;String类的常用方法&#xff08;StringExample.java&#xff09; package step1;public class StringExample {public static void main(String args[]) {String s1 new String("you are a student");String s2 new String("how are you")…

outlook是什么软件outlook邮箱撤回邮件方法

Outlook是微软公司开发的一款邮件客户端&#xff0c;也是Office办公套件的一部分。它可以与多个电子邮件服务提供商&#xff08;如Outlook.com、Exchange、Gmail等&#xff09;集成&#xff0c;用户可以使用Outlook来发送、接收和管理电子邮件、日历、联系人、任务等信息。本篇…

【好玩的开源项目】Linux系统之部署捕鱼达人经典小游戏

【好玩的开源项目】Linux系统之部署捕鱼达人经典小游戏 一、捕鱼达人小游戏介绍1.1 捕鱼达人小游戏简介1.2 项目地址 二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍 三、安装httpd软件3.1 检查yum仓库3.2 安装httpd软件3.3 启动httpd服务3.4 查看httpd服务3.5 防火墙和sel…

vue-浏览器安装Vue开发者工具

极简插件&#xff1a;下载->开发者模式->拖曳安装->插件详情允许访问文件 网址&#xff1a;https://chrome.zzzmh.cn/index 搜索Vue Devtools 下载下来的安装包先解压 然后点击chrome浏览器的右上角三个点的按钮在里面找到扩展程序这个选项&#xff0c;然后点进去管理…

提示3D标题编辑器仍在运行怎么解决,以及3D标题编辑器怎么使用

在进行视频剪辑时&#xff0c;尤其是剪辑一些带有文字的开场视频&#xff0c;一般都会使用具有立体效果的3D标题&#xff0c;这样制作出来的视频效果不仅好看&#xff0c;还非常的炫酷&#xff0c;但是对于一些刚刚开始接触视频剪辑的小伙伴来说&#xff0c;可能对3D标题还不是…

网工内推 | 大专以上,福利待遇好,IE认证优先(云厂商)

01 主动脉科技有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1.负责云计算&#xff0c;IDC&#xff0c;BGP网络&#xff0c;通过团队协作&#xff0c;构建云业务后台技术支持服务体系。 2.通过工单、其他通讯工具等线上方式完成对客户的实施售后支持&#x…

后端开发基本步骤(未完成继续写中)

1.使用spring initializr创建项目 注意&#xff1a;然后低下提供的依赖可用可不用&#xff0c;先不用&#xff0c;后边Maven统一配置依赖&#xff0c; 2.导入依赖 <!-- web --> <dependency><groupId>org.springframework.boot</groupId><artifa…

OpenCV官方教程中文版 —— 图像修复

OpenCV官方教程中文版 —— 图像修复 前言一、基础二、代码三、更多资源 前言 本节我们将要学习&#xff1a; • 使用修补技术去除老照片中小的噪音和划痕 • 使用 OpenCV 中与修补技术相关的函数 一、基础 在我们每个人的家中可能都会几张退化的老照片&#xff0c;有时候…

初学Redis简介以及入门

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Linux》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这…

数据结构与算法C语言版学习笔记(1)-绪论

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、数据结构的研究内容二、基本概念与术语1.数据与数据元素2.数据结构逻辑结构的种类存储结构的种类 三、算法1.什么是算法&#xff1f;算法的描述2.一个算法要具备…

【chatglm3】(2)使用docker运行chatglm3对外的http服务,使用python代码执行函数调用,查询北京天气

函数调用的演示视频&#xff1a; 使用docker运行最新chatglm3-6b&#xff0c;对外的http服务&#xff0c;使用python代码执行函数调用&#xff0c;查询北京天气代码演示和说明 使用docker运行最新chatglm3-6b&#xff0c;对外的http服务&#xff0c;使用python代码执行函数调用…

Java web(三):Http、Tomcat、Servlet

文章目录 一、Java web技术栈二、Http1.1 Http请求数据格式1.2 Http响应数据格式1.3 状态码 二、Tomcat2.1 介绍2.2 web项目结构2.3 IDEA中使用Tomcat 三、Servlet3.1 Servlet使用3.2 Servlet生命周期3.3 Servlet方法和体系结构3.4 urlPattern配置 四、Request4.1 获取请求数据…

数字孪生技术:金融业合规与自动化的未来

在当今数字化时代&#xff0c;金融行业正积极探索数字孪生技术&#xff0c;以实现更高效的运营和更好的客户体验。数字孪生是一种将实体世界的对象、过程和系统数字化为虚拟模型的技术&#xff0c;金融机构正在充分利用它带来的众多优势。 1. 风险管理与模拟 数字孪生模型可用…

数据分析指标体系的构建

指标体系是什么&#xff1f; &#xff08;S1&#xff09;为了用量化方式准确描述场景&#xff0c;提出一系列的指标。&#xff08;S2&#xff09;将指标有系统地组织起来&#xff0c;形成的逻辑体系 指标体系 指标 体系 单独的几个指标不能称之为指标体系 如何评价指…

树莓派安装Ubuntu22.04LTS桌面版

工具&#xff1a;树莓派4B Raspberry Pi 自己下载的ubuntu22.04LTS img磁盘镜像文件 这里有一个小技巧&#xff1a;这个Raspberry Pi的选择镜像的时候在最后面一行可以选择自定义的镜像&#xff0c;哈哈哈哈&#xff0c;这就使得我们可以自己下载&#xff0c;而且知道那个文…

你能想象吗,传输线能控到多少阻抗还要看隔壁信号线的脸色?

高速先生成员--黄刚 关于传输线的阻抗计算相关的文章&#xff0c;高速先生都写过很多篇了&#xff0c;定性来说的话就是传输线的阻抗和自己的线宽铜厚以及材料的介电常数都成反比&#xff0c;与到参考平面的距离成正比。定量来说的话&#xff0c;就以今天我们要讲的案例来说吧…

毕设源码推荐【源码好优多】

一、微信小程序商城管理系统 基于SpringVueMysqlRedis主流技术开发框架集成开发的微信商场管理系统&#xff1b;其中包含微信小程序、java后端、java PC端、数据接口等技术框架&#xff0c;包含&#xff1a;会员管理、商品管理、推广管理、商场管理、订单管理、系统管理等标准通…

名称空间,作用域,global和nonlocal

一、名称空间 加载顺序&#xff1a; 1、内置命名空间 2、全局命名空间 3、局部命名空间 取值顺序&#xff1a; 1、局部命名空间 2、全局命名空间 3、内置命名空间 二、作用域 三、global python之闭包https://blog.csdn.net/Python_1981/article/details/133636994 四…

苹果cms论坛多播放源自动采集在线影视网站

苹果 cms 论坛一个基于 vue 和 gin 实现的在线观影网站 项目采用 vite vue 作为前端技术栈, 使用 ElementPlus 作为 UI 框架进行开发 后端程序使用 Gin gorm go-redis 等相关框架提供接口服务, 使用 gocolly 和 robfig/cron 进行公共影视资源采集和定时更新功能 目前用户…