11.QT-输入类控件|Line Edit|Text Edit|录入个人信息|验证输入框数据|验证两次输入一致|切换显示密码|获取多行输入内容|验证输入框各种信号(C++)

Qt实战案例(9)——利用QLineEdit设置输入掩码来限制输入内容 目录一、输入掩码介绍二、代码示例2.1 input Mask介绍2.2 input Mask示例2.3 输入与输出三、拓展——输入约束 一、输入掩码介绍 QLineEdit提供了输入掩码(input Mask)来限制输入的内容,可以使用一些特殊的字符来设置输入的格式和内容,这些字符中有的起限制作用且必须要输入一个字符,有的只是起限制作用,但可以不输入字符而是以空格代替。 这些特殊字符含义如下表所示。 字符(必须输入) 字符(可留空) 含义 阅读详情

Line Edit

QLineEdit ⽤来表⽰单⾏输⼊框.可以输⼊⼀段⽂本,但是不能换⾏.

属性说明
text输⼊框中的⽂本
inputMask输⼊内容格式约束
maxLength最⼤⻓度
frame是否添加边框
echoMode显⽰⽅式.
• QLineEdit::Normal :这是默认值,⽂本框会显⽰输⼊的⽂本。
• QLineEdit::Password :在这种模式下,输⼊的字符会被隐藏,通常⽤星号(*)或等号(=)代替。
• QLineEdit::NoEcho :在这种模式下,⽂本框不会显⽰任何输⼊
的字符。
cursorPosition光标所在位置
alignment⽂字对⻬⽅式,设置⽔平和垂直⽅向的对⻬.
dragEnabled是否允许拖拽
readOnly是否是只读的(不允许修改)
placeHolderText当输⼊框内容为空的时候,显⽰什么样的提⽰信息
clearButtonEnabled是否会⾃动显⽰出"清除按钮"
属性说明
void cursorPositionChanged(int old, int new)当⿏标移动时发出此信号,old为先前的位置,new为新位置。
void editingFinished()当按返回或者回⻋键时,或者⾏编辑失去焦点时,发出此信号。
void returnPressed()当返回或回⻋键按下时发出此信号.
如果设置了验证器,必须要验证通过,才能触发.
void selectionChanged()当选中的⽂本改变时,发出此信号。
void textChanged(const QString &text)当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。
代码对⽂本的修改能够触发这个信号.
void textEdited(const QString &text))当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。
代码对⽂本的修改不能触发这个信号
代码示例:录⼊个⼈信息

让用户输入个人信息~
1)姓名 2)密码 3)性别 4)电话
通过提交按钮,把上述内容给统一获取到~~

1)在界⾯上创建三个输⼊框和两个单选按钮,⼀个普通按钮.
三个输⼊框的 objectName 为 lineEdit_name , lineEdit_password ,lineEdit_phone
两个单选按钮的 objectName 为 radioButton_male , radioButton_female
按钮的 objectName 为 pushButton
![[Pasted image 20250420191107.png]]

2)编写widget.cpp,在构造函数中编写初始化代码.

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
  
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
  
    //编写第一个输入框,用来输入姓名
    ui->lineEdit_name->setPlaceholderText("请输入姓名");
    ui->lineEdit_name->setClearButtonEnabled(true);
  
    //初始化第二个输入框
    ui->lineEdit_password->setPlaceholderText("请输入密码");
    ui->lineEdit_password->setClearButtonEnabled(true);
    //把显示模式设置成显示密码的模式
    ui->lineEdit_password->setEchoMode(QLineEdit::Password);
  
    //初始化第三个输入框
    ui->lineEdit_phone->setPlaceholderText("请输入电话号码");
    ui->lineEdit_phone->setClearButtonEnabled(true);
    //手机号码固定格式,此处的0代表数字 InputMask可以对输入内容进行简单校验
    ui->lineEdit_phone->setInputMask("000-0000-0000");
}
  
Widget::~Widget()
{
    delete ui;
}
  
  
void Widget::on_pushButton_submit_clicked()
{
    QString gender = ui->radioButton_male->isChecked() ? "男" : "女";
  
    qDebug() << "姓名: " << ui->lineEdit_name->text()
             << "密码: " << ui->lineEdit_password->text()
             << "性别: " << gender
             << "电话: " << ui->lineEdit_phone->text();
  
}

4)执⾏程序,可以看到,随着⽤⼾输⼊内容之后,点击按钮,就能打印到输⼊的信息
![[Pasted image 20250420192720.png]]

![[Pasted image 20250420192727.png]]

inputMask只能进⾏简单的输⼊格式校验.
实际开发中,基于正则表达式的⽅式是更核⼼的⽅法.

代码⽰例:使⽤正则表达式验证输⼊框的数据

此处要求在输⼊框中输⼊⼀个合法的电话号码(1开头,11位,全都是数字).如果验证不通过,则确定按钮⽆法点击.
就需要使用"正则表达式"
计算机中的通用概念,和具体的编程语言无关,
正则表达式,本质上就是一个带有特殊字符的字符串.特殊字符用来表示另一个字符串的特征此时就可以借助正则表达式来描述出一些具有一定特点的字符串
基于这些特点,就可以完成字符串的匹配

关于正则表达式
正则表达式是⼀种在计算机中常⽤的,使⽤特殊字符描述⼀个字符串的特征的机制.在进⾏字符串匹配时⾮常有⽤.
正则表达式的语法还⽐较复杂,⼀般都是随⽤随查,不需要背下来.
参考:
正则表达式语法 | Microsoft Learn
正则表达式语法测试工具 - 在线工具

1)在界⾯上创建输⼊框和⼀个按钮.
![[Pasted image 20250420195002.png]]

此处的规则是,输入框要检查输入的内容是否是合法的手机号码
如果是,则按钮设为可用状态
如果不是,则设为禁用状态
2)编写widget.cpp,把按钮初始enabled设为false.给输⼊框添加验证器.

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //给单行输入框设置验证器,基于正则表达式完成
    QRegExp regExp("^1\\d{10}$");
    ui->lineEdit->setValidator(new QRegExpValidator(regExp));
    //ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("^1\\d{10}$")));
}
  • 使⽤ QRegExp 创建⼀个正则表达式对象. "^1\\d{10}$" 表⽰"以1开头,后⾯跟上任意的10个⼗进制数字".
    ^表示以xXX开头
    ~后面跟着的1,意思就是以1开头,
    ld表示数字,为了在C++字符串中使用,需要写作\d
    {10}表示前面的内容重复出现10次.\d数字要重复出现10次 $表示结尾了.
  • 使⽤ QRegExpValidator 创建⼀个验证器对象.Qt中内置了四个主要的验证器对象.
    ![[Pasted image 20250420195740.png]]

QRegularExpressionValidator 在匹配性能上做出了⼀定优化.但是从使⽤⻆度讲,和QRegExpValidator 差别不⼤.我们使⽤ QRegExpValidator 即可

验证输入框的内容,是否合法
只要输入框中的内容发生改变了,验证操作就应该被执行

3)编写widget.cpp,给 lineEdit 添加 textEdited 信号的slot函数.

  • on_lineEdit_textEdited 的参数是当前输⼊框的内容.
  • 通过 lineEdit->validator() 获取到内置的验证器.
State validate(QString &, int &)
  • 通过 validate ⽅法验证⽂本是否符合要求.
    • 第⼀个参数填写的是要验证的字符串.由于参数要求是 QString& ⽽不是 const QString& ,需要把这个变量复制⼀下.
    • 第⼆个参数是⼀个int&,是输出型参数.当验证的字符串不匹配时,返回这个字符串的⻓度.
    • 返回值是⼀个枚举. QValidator::Acceptable 表⽰验证通过,QValidator::Invalid 表⽰验证不通过.
      程序员可以自定义一个Validator,重写validate函数. 刚才用的RegExpValidator是Qt内置的
void Widget::on_lineEdit_textEdited(const QString &text)
{
    QString content = text;
    int pos = 0;
    if (ui->lineEdit->validator()->validate(content, pos) == QValidator::Acceptable) {
        //验证通过
        ui->pushButton->setEnabled(true);
    } else {
        //验证不通过
        ui->pushButton->setEnabled(false);
    }
}

![[Pasted image 20250420201249.png]]

代码⽰例:验证两次输⼊的密码⼀致

验证两次输入的密码是否一致
使用textEdited信号,来触发对于两个输入框内容的判定~~
1)在界⾯上创建两个输⼊框和⼀个label
![[Pasted image 20250420201909.png]]

2)编写代码,设置两个输⼊框的 echoMode 为 Password

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
  
    //初始化,设置两个输入框的echomode
    ui->lineEdit->setEchoMode(QLineEdit::Password);
    ui->lineEdit_2->setEchoMode(QLineEdit::Password);
    ui->label->setText("密码为空");
}

3)给两个输⼊框设置 textEdited slot函数

void Widget::on_lineEdit_textEdited(const QString &arg1)
{
    (void) arg1;
    this->compare();
}
  
void Widget::on_lineEdit_2_textEdited(const QString &arg1)
{
    (void) arg1;
    this->compare();
}
  
void Widget::compare()
{
    const QString& s1 = ui->lineEdit->text();
    const QString& s2 = ui->lineEdit_2->text();
    if (s1.isEmpty() && s2.isEmpty()) {
        ui->label->setText("密码为空");
    } else if (s1 == s2) {
        ui->label->setText("两次输入的密码一致");
    } else {
        ui->label->setText("两次输入的密码不一致");
    }
}
(void) arg1;

这个写法就是类型转换
这个写法对于代码的实际逻辑是没有任何影响的同时可以“骗过”编译器,警告就没了~~

4)执⾏程序,观察效果.
![[Pasted image 20250420203237.png]]

代码⽰例:切换显⽰密码

1)创建⼀个输⼊框和⼀个复选按钮.
![[Pasted image 20250420203445.png]]

2)修改widget.cpp,设置输⼊框的 echoMode 为 Password

#include "widget.h"
#include "ui_widget.h"
  
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
  
    //初始化显示模式
    ui->lineEdit->setEchoMode(QLineEdit::Password);
}
  
Widget::~Widget()
{
    delete ui;
}
  
  
void Widget::on_checkBox_toggled(bool checked)
{
    if (checked) {
        //true,显示密码状态,把显示模式,设为Normal
        ui->lineEdit->setEchoMode(QLineEdit::Normal);
    } else {
        //false,隐藏密码状态,把显示模式,设为Password
        ui->lineEdit->setEchoMode(QLineEdit::Password);
    }
}

![[Pasted image 20250420203814.png]]

![[Pasted image 20250420203819.png]]

Text Edit

QTextEdit 表⽰多⾏输⼊框.也是⼀个富⽂本&markdown编辑器.
并且能在内容超出编辑框范围时⾃动提供滚动条.

属性说明
markdown输⼊框内持有的内容.⽀持markdown格式.能够⾃动的对markdown⽂本进⾏渲染成html
html输⼊框内持有的内容.可以⽀持⼤部分html标签.包括img和table等.
placeHolderText输⼊框为空时提⽰的内容.
readOnly是否是只读的
undoRedoEnable是否开启undo/redo功能.
按下ctrl+z触发undo
按下ctrl+y触发redo
autoFormating开启⾃动格式化.
tabstopWidth按下缩进占多少空间
overwriteMode是否开启覆盖写模式
acceptRichText是否接收富⽂本内容
verticalScrollBarPolicy垂直⽅向滚动条的出现策略
• Qt::ScrollBarAsNeeded :根据内容⾃动决定是否需要滚动条。这是默认值。
• Qt::ScrollBarAlwaysOff :总是关闭滚动条。
• Qt::ScrollBarAlwaysOn :总是显⽰滚动条。
horizontalScrollBarPolicy⽔平⽅向滚动条的出现策略
• Qt::ScrollBarAsNeeded :根据内容⾃动决定是否需要滚动条。这是默认值。
• Qt::ScrollBarAlwaysOff :总是关闭滚动条。
• Qt::ScrollBarAlwaysOn :总是显⽰滚动条。
信号说明
textChanged()⽂本内容改变时触发
selectionChanged()选中范围改变时触发
cursorPositionChanged()光标移动时触发
undoAvailable(bool)可以进⾏undo操作时触发
redoAvailable(bool)可以进⾏redo操作时触发
copyAvaiable(bool)⽂本被选中/取消选中时触发
代码⽰例:获取多⾏输⼊框的内容

1)创建⼀个多⾏输⼊框和⼀个label
![[Pasted image 20250420205133.png]]

2)给多⾏输⼊框添加slot函数.处理 textChanged 信号.

  • 通过 toPlainText ⽅法获取到内部的⽂本.
  • 类似的, QTextEdit 还提供了 toMarkdown 和 toHtml .根据需要我们调整不同的获取⽅式.
void Widget::on_textEdit_textChanged()
{
    //获取到多行输入框的内容
    const QString& text = ui->textEdit->toPlainText();
    ui->label->setText(text);
}

3)执⾏程序,可以看到当输⼊框中的内容发⽣变化时,label中的内容同步发⽣改变.
![[Pasted image 20250420205354.png]]

代码⽰例:验证输⼊框的各种信号

1)创建多⾏输⼊框
![[Pasted image 20250420205656.png]]

2)给输⼊框添加以下⼏个slot函数

  • QTextEdit 中包含了⼀个 QTextCursor 对象,通过这个对象可以获取到当前光标位置和选中的内容.
void Widget::on_textEdit_textChanged()
{
    qDebug() << "textChanged: " << ui->textEdit->toPlainText();
}
  
void Widget::on_textEdit_selectionChanged()
{
    QTextCursor cursor =  ui->textEdit->textCursor();
    qDebug() << "selectionChanged: " << cursor.selectedText();
}

![[Pasted image 20250420210135.png]]

![[Pasted image 20250420210125.png]]

void Widget::on_textEdit_cursorPositionChanged()
{
    QTextCursor cursor = ui->textEdit->textCursor();
    qDebug() << "cursorPositionChanged: " << cursor.position();
}

![[Pasted image 20250420210347.png]]

void Widget::on_textEdit_undoAvailable(bool b)
{
    qDebug() << "undoAvailable: " << b;
}
  
void Widget::on_textEdit_redoAvailable(bool b)
{
    qDebug() << "redoAvailable: " << b;
}
  
void Widget::on_textEdit_copyAvailable(bool b)
{
    qDebug() << "copyAvailable: " << b;
}

![[Pasted image 20250420210730.png]]

  1. 编写内容时, textChanged 和 cursorPositionChanged 会触发
  2. 选中⼀段⽂本时, cursorPositionChanged , selectionChanged , copyAvailable 会触发.
  3. 按下ctrl+z时, textChanged , undoAvailable , redoAvailable ,cursorPositionChanged 会触发
  4. 按下ctrl+y, textChanged , undoAvailable , redoAvailable ,cursorPositionChanged 会触发
Qt学习笔记3-lineEdit和textEdit **lineEdit->setText();//用于输出一行的数据 textEdit->append();//用于输出几行的数据,可以翻看日历记录***QByteArray和QString的作用: QByteArray键盘输入或计算机记录的数据格式,而QString是输出的数据格式* 例如:QByteArray temp = serial.readAll(); //读取串口所有的数据,QByt 阅读详情

相关推荐

C++ Qt实战入门:从零构建跨平台桌面应用开发环境与核心机制

C++作为高性能系统编程语言,在桌面应用开发中面临图形界面构建和跨平台适配的挑战。Qt框架通过信号槽机制和对象树模型,为C++提供了成熟的GUI解决方案,实现了事件驱动编程和半自动内存管理。其技术价值在于将C++的底层控制力与现代框架的开发效率结合,支持快速构建工业级桌面、嵌入式及移动端应用。在应用场景上,Qt广泛用于工业软件、汽车中控、医疗设备等对性能和可靠性要求高的领域。本文以Qt 5.15 LTS和MSVC编译器为例,详解环境搭建、核心机制及项目发布流程,帮助开发者掌握C++ Qt开发的关键技能。

weixin_34050519的博客 592

Qt中LineEdit、TextEdit 、PlainTextEdit三个控件的区别

Qt中LineEdit、TextEdit、PlainTextEdit这三个控件区别为:输入格式不同、用途不同、限制行数不同。

weixin_44049823的博客 8753

QT学习笔记

QT学习笔记

weixin_52938172的博客 1493

QT 表格中的内容 怎么用 inputmask设定范围

一般inputmask 只能用在QLineEdit中设定界限,这次做上位机的时候,内容是在表格中,经过同事指导帮忙,实现如下: 上位机从下位机读取参数,或者初始化 QString str; for(int i =0;i6;i++) { str += QString("%1").arg(stru.p

小小黑猫警长的博客 4168

PyQt Designer入门指南:可视化GUI开发与Python桌面应用实战

图形用户界面(GUI)开发是提升软件交互体验的关键技术,其核心在于将用户操作与程序逻辑高效连接。通过可视化设计工具,开发者能够直观构建界面布局,大幅提升开发效率。PyQt Designer作为Qt官方工具,采用拖拽式设计生成XML格式的UI文件,实现了界面与业务逻辑的彻底分离。这种分离架构让Python开发者能专注于后端数据处理与功能实现,而无需纠结于控件像素级调整。在工程实践中,结合PyQt5的信号槽机制,可实现事件驱动编程,完美支撑数据分析展示、内部工具开发等应用场景。本文以登录对话框为例,详解从环境配

weixin_34389926的博客 288

PySide6 GUI开发入门:从环境搭建到应用打包全流程指南

GUI(图形用户界面)开发是连接用户与程序功能的重要桥梁,其核心在于创建直观、易用的交互界面。在Python生态中,PySide6作为Qt官方Python绑定库,凭借其强大的功能和宽松的LGPL协议,成为桌面应用开发的热门选择。其技术价值在于提供了丰富的预制组件和高效的信号与槽机制,使得开发者能够快速构建跨平台的现代化应用。在应用场景上,无论是开发内部工具、数据可视化面板还是小型桌面软件,PySide6都能胜任。本文聚焦于PySide6的实战入门,详细解析了环境配置、核心组件使用、界面设计以及最终的应用打包

weixin_30740295的博客 531

QT常用控件篇(3)(中)

Qt常用输入类控件了解

2601_95366422的博客 194

DBeaver Ultimate 25.3:企业级多源数据库治理与SQL工程化实践

数据库客户端工具已从基础连接演进为数据工程核心枢纽。理解元数据快照隔离、可插拔执行上下文等架构原理,是实现跨库协同、生产环境安全管控与高并发SQL治理的技术前提。这类能力直接支撑信创迁移、异构数据库统一运维、灰度发布审计等关键场景,尤其在OceanBase Oracle模式调试、PostgreSQL逻辑复制槽监控、ClickHouse分布式JOIN优化等新一代数据库深度适配中体现显著工程价值。DBeaver Ultimate Edition 25.3正是面向DBA、数据工程师和后端开发,提供元数据治理、SQ

anchang7456的博客 443

Qt_常用控件使用学习

QT常用控件学习以及使用案例

前端开发工程师 494

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作02

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景301集合运算关系代数关系集合Feature Selection (Chi-Square)集合运算卡方检验目标函数:χ2=∑E(O−E)2​ 衡量分类特征与目标的相关性;资源:O(n·d);条件:离散特征,离散目标;组合约束:值越大相关性越强。 数据结构:列联表。 代码实现(C++): 特征列,目标列文本分类中的特征选择。302集合运算关系代数关系集合Feature Selection (ANOVA F

weixin_49199313的博客 309

用Python实现一个猜密码的程序

我们用Python实现猜密码

sk6584631_sz的博客 1261

Linux命令及使用方法new

本文总结了Linux系统管理与开发环境配置的实用技巧,涵盖了常用命令、工具配置和问题解决方法。主要内容包括:Linux基础操作(文件/目录管理、vim编辑器、权限控制);系统资源监控(du/df命令);文本处理(grep/cut/awk);Ubuntu系统问题排查;开发工具链配置(Anaconda/Virtualenvwrapper/Jupyter);终端增强(cmder/Screen);IDE使用(VSCode/Visual Studio);非root权限软件安装;Windows冷门知识;LaTeX语法;

zhjadsf的博客 3217

六维力传感器选型指南:电阻式vs电容式,哪个更适合你的工业场景?

本文深入解析六维力传感器在工业自动化中的选型要点,重点对比电阻式与电容式传感器的核心原理、环境适应性及成本结构。针对不同工业场景(如高精度装配、重载机器人等),提供专业选型建议,帮助工程师优化系统性能与经济效益。

weixin_42525005的博客 395

【Qt】Qt控件 | QTextEdit

【Qt】QTextEdit

m0_72563041的博客 3226

[前沿技术] AMD FSR 1.0源码解析:EASU算法实现细节与优化策略

本文深入解析了AMD FSR 1.0技术的核心——EASU(边缘自适应空间升频)算法。通过剖析其源码,详细阐述了EASU如何利用12-tap采样窗口、基于Lanczos滤波器的多项式近似以及自适应的边缘检测机制,在无需AI模型的情况下实现高质量图像放大。文章重点揭示了其极致的GPU优化策略,包括寄存器利用、采样优化和避免动态分支,为理解高性能图形算法提供了绝佳范例。

docker7nomad的博客 540

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 472

【Qt 常用控件】输入类控件1(QLineEdit和QTextEdit 输入框)

QLineEdit::Normal:默认值,输入什么显示什么。来定义字符的集合,帮助你查找、替换、提取或验证文本数据。功能:单行输入框、可以输入一段文本,但不能换行。参数1:QString&,不是 const的。通过带参数的信号槽得到的文本,是const的。如果设置了验证器,必须验证通过才能发出信号。当通过代码方式修改文本,也能触发该信号。当通过代码方式修改文本,不能触发该信号。只能由使用者修改输入框内容时,才会触发。当选中的文本改变时,发出该信号。当文本内容改变时,发出信号。当文本内容改变时,发出信号。

qq_64592049的博客 1860

ReportStudio入门教程(四十一) - 固定报表列宽

我们继续上一篇博客,让他看起来

什么是江湖? 3516

源码解析11-QLineEdit控件信号textChanged和textEdited区别

Qt源码解析11-QLineEdit控件信号textChanged和textEdited区别

xinqingwuji的博客 928

7、Python高光谱分析工具(PyHAT)简介

Python高光谱分析工具(PyHAT)是一个开源、跨平台的Python库及图形用户界面,用于行星光谱数据的可视化与分析。它支持多种高光谱传感器数据,如火星勘测轨道飞行器的CRISM、月船1号的M3以及SELENE Kaguya SP点光谱仪,提供预处理、衍生产品生成、统计学习和机器学习分析功能。PyHAT基于Pandas和NumPy构建,兼容Jupyter和QGIS环境,旨在解决现有光谱分析方法缺乏开源实现、难以探索性分析和算法分散的问题。其模块化架构涵盖数据输入/输出、通用光谱变换、测绘与点观测工具及高

aa123的博客 138

如何在多 GPU 配置上运行 Unsloth:数据并行或模型并行

当工作负载受限于内存(模型或批次无法放入单张显卡)、或受限于计算且计算与通信比率较高时(即每块 GPU 的额外计算量超过同步参数的开销,如在 DDP 中,或超过传递激活值的开销,如在模型并行中),多 GPU 配置才开始显现优势。在松散连接的显卡上(尤其是 PCIe 版本的 H100 或 A100),额外的设备间数据传输会导致性能显著低于单 GPU 运行。让我们厘清概念,明确说明如何通过模型并行(将模型拆分到多个 GPU)或数据并行(在每个 GPU 上复制模型)来跨多 GPU 运行 Unsloth。

人工智能领域专家 646

【Qt 学习笔记】Qt常用控件 | 输入类控件 | Line Edit的使用及说明

QLineEdit 用来表示单行输⼊框. 可以输入⼀段文本, 但是不能换行.QLineEdit 是 Qt 框架中的一个小部件,用于接收和显示单行文本。它可以用于接收用户的输入,也可以用于显示程序输出的结果。QLineEdit 具有许多功能,包括自动完成、输入限制、密码模式等。它还可以设置最大长度、光标样式、输入校验等。QLineEdit 可以被嵌入到其他 Qt 小部件中,如对话框、窗口等。

小黄鸭的博客 4527

高通拨号流程介绍

本文介绍了高通平台(如SDX55)中APSS(A7处理器)与ModEM(Q6处理器)间的通信机制。

四儿家的小祖宗的博客 1067

【Qt】常用控件(输入类)

QTextEdit 表示多行输入框.也是一个富文本& markdown编辑器.QLineEdit 用来表示单行输入框,可以输入一段文本,但是不能换行。在ui中拖入几个lineEdit以及label和pushbutton。先在ui中拖入需要的控件,一个TestEdit。并且能在内容超出编辑框范围时自动提供滚动条.QComboBox 表示下拉框。方法① 使用代码设置条目内容。方法② 右键控件点击编辑项目。QSlider表示一个滑动条。

Tianzhenchuan的博客 2068

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 10.QT-显示类控件|LCD Number|ProgressBar|Calendar Widget(C++)
下一篇: 12.QT-Combo Box|Spin Box|模拟点餐|从文件中加载选项|调整点餐份数(C++)
ChoSeitaku
博客等级 码龄5年 3452粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值