当前位置:   article > 正文

Qt学习08:文本输入类与快捷键_qt文字输入设置

qt文字输入设置

文章首发于我的个人博客:欢迎大佬们来逛逛
完整Qt学习项目地址:源码地址

QLineEdit

QLineEdit是最基本的输入控件,常用于短行的文本输入

请添加图片描述

构造函数

 QLineEdit(const QString &contents, QWidget *parent = nullptr)
 QLineEdit(QWidget *parent = nullptr)
  • 1
  • 2

继承自:**QObject**

常用基本功能函数:简单介绍几个:

  1. setEchoMode:设置文本的输入展示方式:QLineEdit::EchoMode
    1. Normal:正常显示
    2. NoEcho:不显示输入,但是实际上是接受的。
    3. Password:密码显示模式
    4. PasswordEchoOnEdit:编辑时显示,完成后切换为密码模式
  2. setCompleter:自动补全功能
  3. setInputMask:设置输入的格式化
  4. setDragEnabled:允许对文本的拖拽
void Widget::testQLineEdit()
{
    //创建行编辑框
    edit=new QLineEdit("我是编辑框",this);

    //设置文本
    edit->setText("edit");
    qInfo()<<edit->text();

    //清空文本
    edit->clear();

    //设置显示文本
    edit->setEchoMode(QLineEdit::EchoMode::Normal);

    //表面上是什么,实际就输出什么
    edit->displayText();

    //设置提示文本
    edit->setPlaceholderText("手机号/QQ/邮箱");

    //设置清空按钮
    edit->setClearButtonEnabled(true);

    //设置图标行为
    edit->addAction(QIcon("cha.png"),QLineEdit::ActionPosition::TrailingPosition);

    //设置自动补全
    QStringList compstr;
    compstr<<"123456"<<"zhangsan"<<"111122233";
    QCompleter* comp=new QCompleter(compstr,this);
    edit->setCompleter(comp);

    //限制输入长度
    edit->setMaxLength(5);

    //设置只读
    edit->setReadOnly(true);

    //设置验证器(用于输入验证)
    QIntValidator* valdator=new QIntValidator(0,100,this);
    edit->setValidator(valdator);

    //设置格式输入(输入按指定格式的文本)
    edit->setInputMask("AAAA-AAAA-AAAA-AAAA");

    edit->setText("123456789");

    //信号:textEdited文本编辑时触发
    //connect(edit,&QLineEdit::textEdited,this,[](const QString& str){qInfo()<<str;});

    //textChanged文本改变时触发,包括settext
    //connect(edit,&QLineEdit::textChanged,this,[](const QString& str){qInfo()<<str;});

    //回车触发
    connect(edit,&QLineEdit::returnPressed,this,[=](){qInfo()<<edit->text();});

    //编辑完成时触发
    //光标位置发生变化时
    //选择改变时
    connect(edit,&QLineEdit::selectionChanged,this,[=](){qInfo()<<edit->selectedText();});
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

信号:

 void cursorPositionChanged(int oldPos, int newPos) 光标位置改变
 void editingFinished()	编辑完成的时候
 void inputRejected()	输入完成的时候
 void returnPressed()	输入回车的时候
 void selectionChanged() 选择改变的时候
 void textChanged(const QString &text)	文本改变的时候(包括settext)
 void textEdited(const QString &text) 	文本编辑的时候(只包括手动的编辑修改)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

QTextEdit

QTextEdit是文本输入区域,常用于长文本,继承自滑块类QAbstractScrollArea,因此他是一个具有滑动条的长文本编辑框。

构造函数:

 QTextEdit(const QString &text, QWidget *parent = nullptr)
 QTextEdit(QWidget *parent = nullptr)
  • 1
  • 2

QTextEdit不仅像QLineEdit支持普通文本的输入,还支持Html,markdown等文本的输入。

多种格式的输入:

//设置普通文本
tedit->setPlaceholderText("请输入你的简介"); 
//设置HTML
tedit->setHtml("<h1>999999daw,666</h1>");
//插入一个Html
tedit->insertHtml("<a href="https://helloylh.com"> 点击进入我的网站 </a>");
//设置MarkDown
tedit->setMarkdown("# 一级标题\\n - 选项一\\n - 选项二");

//自定义文本格式
QTextCursor cs=tedit->textCursor();
QTextCharFormat format;
format.setFontUnderline(true);
format.setUnderlineColor(Qt::green);
format.setForeground(Qt::blue);
cs.insertText("插入内容",format);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

文本的获取:

//输出普通文本
qInfo()<<tedit->toPlainText();
//输出Html型文本
qInfo()<<tedit->toHtml();
//输出MarkDown型文本
qInfo()<<tedit->toMarkdown();

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

QTextCursor

QTextCursor提供了由简单到复杂的对文本的插入操作,简单来说,你可以通过QTextCursor来插入东西到QTextEdit文本框中。

首先获取文本光标:任何插入都是基于光标的

QTextEdit* tedit=new QTextEdit(this);
QTextCursor cursor=tedit->textCursor(); //获取指向tedit的光标
  • 1
  • 2

支持的插入操作的类包括:
QTextFormat
QTextBlockFormat
QTextCharFormat:QTextImageFormat ;QTextTableCellFormat
QTextFrameFormat:QTextTableFormat
QTextListFormat


插入普通文本:

cursor.insertText("Hello World");
  • 1

插入带格式的复杂文本:(设置文本的格式)
QTextCharFormat :文本格式设置类,用它可以对文本的格式化进行设置,它里面包含了许多对文本格式的set,例如setFontUnderline设置下划线,setBackground设置背景颜色。。。setfont设置格式。。

//设置文本的格式
QTextCharFormat tcf;
tcf.setAnchor(Qt::red);
tcf.setFontUnderline(Qt::blue);
tcf.setBackground(QBrush(Qt::yellow));
cursor.insertText("666",tcf);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

插入图片,设置图片的格式
QTextImageFormat :图片格式设置类。

//插入图片,设置图片格式
QTextImageFormat tif;
tif.setName("cha.png");
cursor.insertImage(tif,QTextFrameFormat::Position::InFlow);
  • 1
  • 2
  • 3
  • 4

插入一段话(文档内容)
QTextDocumentFragment:类

cursor.insertFragment(QTextDocumentFragment::fromHtml("<a href='<https://www.baidu.com>'>百度一下</a>"));

  • 1
  • 2

插入列表
QTextListFormat 列表类

//插入列表
QTextListFormat tlf;
cursor.insertList(tlf);

//列表的设置
QTextCursor tcur=tedit->textCursor();
QTextListFormat tlf;
tlf.setNumberPrefix("<");
tlf.setNumberSuffix(">");
tlf.setStyle(QTextListFormat::ListDecimal);
tcur.insertList(tlf);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

插入表格
QTextTableFormat 类

//插入表格
QTextTableFormat ttf;
ttf.setCellPadding(10);
//ttf.setBackground(Qt::blue);
cursor.insertTable(3,4,ttf);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

QPlainText

QPlainTextEdit是一个简略版本的类,它的性能优于QTextEdit

QPlainText和QTextEdit大致功能实现差不多

构造函数:

 QPlainTextEdit(const QString &text, QWidget *parent = nullptr)
 QPlainTextEdit(QWidget *parent = nullptr)
  • 1
  • 2

基本功能:

设置初始占位字符

ptext->setPlaceholderText("请输入200字以内检讨");
  • 1

设置只读

ptext->setReadOnly(true);
  • 1

设置输入文本格式

//设置文本的格式
QTextCharFormat tcf;
tcf.setAnchor(Qt::red);
tcf.setFontUnderline(Qt::blue);
tcf.setBackground(QBrush(Qt::yellow));

//插入格式
ptext->setCurrentCharFormat(tcf);
qInfo()<<ptext->currentCharFormat();

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

https://img-blog.csdnimg.cn/c98a9cb243a64af1bf5bd58378db183e.png

软换行:

ptext->setLineWrapMode(QPlainTextEdit::LineWrapMode::WidgetWidth);
  • 1

没有软换行
QPlainTextEdit.NoWrap

超出控件宽度进行自动换行
QPlainTextEdit.WidgetWidth


输入操作:

setPlainText(text_str)
	设置普通文本内容
insertPlainText(text_str)
	插入普通文本
appendPlainText(text_str)
	追加普通文本
appendHtml(html_str)
	追加HTML字符串
	注意有些标签不支持
			表格
			列表
			图片
			...
toPlainText() -> 转换成纯文本

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

块数量;

blockCount() -> int
	当前块个数
maximumBlockCount() -> int
	最大块个数
setMaximumBlockCount(int)
	设置最大块个数

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

编辑操作:

selectAll()
		选中所有
	copy()
		复制选中文本
	cut()
		剪切选中文本
	paste()
		粘贴文本
		canPaste() -> bool
			判定是否可以粘贴
	clear()
		清空内容
	redo()
		重做
		isUndoRedoEnabled() -> bool
			判定撤销重做是否可用
		setUndoRedoEnabled(bool)
			设置撤销重做是否可用
	undo()
		撤销
	find(str, QTextDocument.FindFlags) -> bool
		QTextDocument.FindBackward
			向后搜索而不是向前搜索。
		QTextDocument.FindCaseSensitively
			默认情况下,查找工作区不区分大小写。
			指定此选项会将行为更改为区分大小写的查找操作。
		QTextDocument.FindWholeWords
			使查找匹配仅完整的单词。
	zoomIn(int range = 1)
		放大缩小
			range > 0
				放大
			range < 0
				缩小

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

信号:

	textChanged()
		文本改变时
	selectionChanged()
		选中内容改变时
	modificationChanged(bool)
		编辑状态改变时
	cursorPositionChanged()
		光标位置改变时
	blockCountChanged(int)
		块的个数发生改变时
	updateRequest(QRect rect, int dy)
		内容更新请求时
	copyAvailable(bool)
		复制可用时
	redoAvailable(bool)
		重做可用时
	undoAvailable(bool)
		撤销可用时

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

QKeySequenceEdit

请添加图片描述

QKeySequenceEdit是一个用于设计快捷键的类,当控件收到焦点时开始录制快捷键的按键情况,并在用户释放最后一个关键字后一秒钟结束录制,这个类通常与 快捷键的响应类一起使用:**QShortcut**

构造函数:
接受一个父窗口,同时可以直接传递一个默认的快捷键:使用:QKeySequence(“Ctrl+P”) 可以创建一个快捷键。

QKeySequenceEdit(const QKeySequence &keySequence, QWidget *parent = nullptr)
QKeySequenceEdit(QWidget *parent = nullptr)
  • 1
  • 2

QKeySequence类用来描述标准键位序列,里面提供了许多的标准键位供我们设置QKeySequenceEdit的快捷键消息。
例如:

QKeySequence::StandardKey::SelectAll 表示全选键: Ctrl + A
  • 1

快捷键连接消息:
使用QShortcut

当我们往QKeySequenceEdit输入快捷键时(本例为Ctrl+Shift+F),就会激活QShortcut的activated的信号,表示快捷键激活,然后就会传递一个信号供槽函数接受。

当然不必每次都使用setkey来指定接受的快捷键,还可以直接在创建QShortcut对象时直接进行连接快捷键,如下面的操作。

void Widget::testQKeySequenceEdit()
{
    auto btn=new QPushButton(this);
    btn->move(200,0);
    connect(btn,&QPushButton::clicked,this,&Widget::onClicked);

    key = new QKeySequenceEdit(this);

    //相对于Widget窗口来说的快捷键设置
    QShortcut* st=new QShortcut(this);
    st->setKey(QKeySequence("Ctrl+Shift+A"));
    connect(st,&QShortcut::activated,this,&Widget::activated_Ctrl_Shift_A);

    new QShortcut(QKeySequence::StandardKey::SelectAll,this,[](){
        qInfo()<<"SelectAll 被激活";
    });
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/118104
推荐阅读
相关标签
  

闽ICP备14008679号