zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Qt之QLineEdit

Qt
2023-09-11 14:19:13 时间

QLineEdit允许用户输入和编辑单行纯文本,提供了很多有用的编辑功能,包括:撤消和重做、剪切和粘贴、以及拖放(见setDragEnabled())。

通过改变输入框的echoMode(),同时也可以设置为一个“只写”字段,用于输入密码等。

文本的长度可以被限制为maxLength(),可以使用一个validator()或inputMask()来任意限制文本。当在同一个输入框中切换验证器和输入掩码的时候,最好是清除验证器或输入掩码,防止不确定的行为。


可以使用setText()或insert()来改变文本,通过text()来获取文本;显示的文本(可能不同,详见:EchoMode)通过displayText()来获取。文本可以使用setSelection()或selectAll()来选中,选中的文本可以被cut()、copy()和paste(),使用setAlignment()来设置文本的对齐方式。

当文本改变时,会发射textChanged()信号。当使用setText()改变文本时,textEdited()信号也会发射。光标位置发生变化时,会发射cursorPositionChanged()信号,当Return或Enter键被按下时,发射returnPressed()信号。

当编辑完成,或者是因为输入框失去焦点,或Return/Enter键被按下时,发出的editingFinished()信号。

注意:如果输入框有一个验证器,returnPressed()/editingFinished()信号只有在验证期返回QValidator::Acceptable的时候才会被发射。

默认情况下,QLineEdit具有由平台风格指南规定的边框,可以通过setFrame(false)将其关闭。

默认键被绑定描述如下。输入框还提供了一些编辑选项的上下文菜单(通常通过单击鼠标右键调用)。


当使用布局方向Qt::LeftToRight时,部件显示在文本左侧;使用Qt::RightToLeft时,则显示在右侧。
当使用布局方向Qt::LeftToRight时,部件显示在文本右侧;使用Qt::RightToLeft时,则显示在左侧。
返回输入框的当前文本。

void addAction(QAction * action, ActionPosition position)

QAction * addAction(const QIcon icon, ActionPosition position)
添加action至指定位置。

Qt::Alignment alignment() const

void setAlignment(Qt::Alignment flag)

alignment : Qt::Alignment
属性保存了输入框的对齐方式(水平和垂直方向)。Qt::AlignJustify映射到Qt::AlignLeft。
默认情况下,该属性包含Qt::AlignLeft和Qt::AlignVCenter。

QCompleter* completer() const

void setCompleter(QCompleter * c)
QCompleter后面详细讲解。

void deselect()
取消选中任何已选中的文本。

QString displayText() const
返回显示的文本。默认值为一个空字符串。
如果echoMode是Normal,和text()返回的一样;如果EchoMode是Password或PasswordEchoOnEdit,会返回平台相关的密码掩码字符,长度为text().length(),例如:"******";如果EchoMode是NoEcho,返回一个空字符串""。

QString selectedText() const
返回选中的的文本。如果没有选中,返回一个空字符串。默认为一个空字符串。

int cursorPosition() const

void setCursorPosition(int)

cursorPosition : int
属性包含输入框当前光标的位置。设置光标位置时,会导致应有的重绘。默认情况下,属性值为0。

EchoMode echoMode() const

void setEchoMode(EchoMode)

echoMode : EchoMode
属性保存了输入框的显示模式。显示模式决定了输入框对用户的文本显示。默认值为Normal
最常用的设置是Normal,用户输入文本被逐字显示;还包含其它模糊输入,例如:NoEcho、Password和PasswordEchoOnEdit。
部件的显示、复制或拖动文本的行为受此设置的影响。

int maxLength() const

void setMaxLength(int)

maxLength : int
此属性包含文本的最大允许长度。如果文本太长,将从限制的位置截断。默认值为32767。
如果发生截断任何选中的文本将取消选中,光标位置设置为0,并且显示字符串的第一部分。
如果输入框有一个输入掩码,那么,掩码定义字符串的最大长度。

QString placeholderText() const

void setPlaceholderText(const QString )

placeholderText : QString
当输入框为空时,输入框显示一个灰色的占位符文本。默认值为一个空字符串。
通常,一个空的输入框显示占位符文本,即使它有焦点。然而,如果内容水平居中,当输入框有焦点时,占位符文本不显示在光标下。

bool isReadOnly() const

void setReadOnly(bool)

readOnly : bool
此属性保存输入框是否为只读。
在只读模式下,用户仍然可以将文本复制到剪贴板,或拖放文本(如果echoMode()是Normal),但不能编辑它。
只读模式下,QLineEdit也不显示光标。

void setSelection(int start, int length)
从位置start选择文本为length个字符,允许负长度。

void setValidator(const QValidator * v)
设置输入框的验证器,将限制任意可能输入的文本。如果v == 0,将会清除当前的输入验证器
如果v = = 0,setValidator()删除当前的输入验证器。初始设置是没有输入验证器(即:接受任何输入到maxLength())。

const QValidator * validator() const
返回一个当前输入的验证器指针,如果没有设置验证器,返回0。

QString inputMask() const

void setInputMask(const QString inputMask)

inputMask : QString
此属性保存验证器的输入掩码。如果没设置研发,inputMask() 或返回一个空字符串。传递一个空字符串可以取消验码并返回一个正常QLineEdit。


下表列出了可在一个输入掩码中使用的字符。空格字符,是一个空白的缺省字符,当一个字符是允许的,但不是必须的请胯下。


掩码由掩码字符和分隔符字符串组成,后面可以跟一个分号和用于空白的字符,空白字符在编辑后总是从文本中删除。

示例:


只要选择改变这个信号就会被发射。

void cursorPositionChanged(int old, int new)
只要光标移动,这个信号就会发射。前面的位置old,新的位置是new。

void editingFinished()

void returnPressed() void textChanged(const QString text) void textEdited(const QString text)
参考:“详细描述”
如果echoMode()是Normal,将所选文本复制到剪贴板并删除它。
如果当前的验证不允许删除选定的文本,cut()将复制而不删除。

void paste()
如果输入框不是只读的,插入剪贴板中的文本到光标所在位置,删除任何选定的文本。
如果最终的结果不被当前的验证器接受,将没有任何反应。

void redo()
重做上次操作,如果redo可用(isRedoAvailable() )。

void selectAll()
选中所有文本(即:高亮),并将光标移动到末尾。当一个默认值被插入时,这非常有用,因为如果用户在点击部件之前就输入,选中的文本将被删除。

void setText(const QString )
设置输入框显示的文本。

void undo()
撤消上次操作,如果撤消可用( isUndoAvailable())。取消任何当前的选中,并更新选中到当前光标位置。


QLineEdit *pNormalLineEdit = new QLineEdit(this);

QLineEdit *pNoEchoLineEdit = new QLineEdit(this);

QLineEdit *pPasswordLineEdit = new QLineEdit(this);

QLineEdit *pPasswordEchoOnEditLineEdit = new QLineEdit(this);

pNormalLineEdit- setPlaceholderText("Normal");

pNoEchoLineEdit- setPlaceholderText("NoEcho");

pPasswordLineEdit- setPlaceholderText("Password");

pPasswordEchoOnEditLineEdit- setPlaceholderText("PasswordEchoOnEdit");

// 设置显示效果

pNormalLineEdit- setEchoMode(QLineEdit::Normal);

pNoEchoLineEdit- setEchoMode(QLineEdit::NoEcho);

pPasswordLineEdit- setEchoMode(QLineEdit::Password);

pPasswordEchoOnEditLineEdit- setEchoMode(QLineEdit::PasswordEchoOnEdit);

QAction *pLeadingAction = new QAction(this); pLeadingAction- setIcon(QIcon(":/Images/leading")); m_pLineEdit- addAction(pLeadingAction, QLineEdit::LeadingPosition); QAction *pTrailingAction = m_pLineEdit- addAction(QIcon(":/Images/trailing"), QLineEdit::TrailingPosition); // 连接信号和槽 connect(pTrailingAction, SIGNAL(triggered(bool)), this, SLOT(onSearch(bool)));

槽函数,用于获取输入框中的内容,然后处理。


QString strText = m_pLineEdit- text(); m_pLabel- setText(QString::fromLocal8Bit("输入内容为:%1").arg(strText)); }

通常情况下,我们会对用户的输入做一些限制,可以通过验证起来设置,常见的有:整形、浮点型及其它自定义验证器。


QLineEdit *pIntLineEdit = new QLineEdit(this);

QLineEdit *pDoubleLineEdit = new QLineEdit(this);

QLineEdit *pValidatorLineEdit = new QLineEdit(this);

pIntLineEdit- setPlaceholderText(QString::fromLocal8Bit("整形"));

pDoubleLineEdit- setPlaceholderText(QString::fromLocal8Bit("浮点型"));

pValidatorLineEdit- setPlaceholderText(QString::fromLocal8Bit("字母和数字"));

// 整形 范围:[1, 99]

QIntValidator *pIntValidator = new QIntValidator(this);

pIntValidator- setRange(1, 99);

// 浮点型 范围:[-360, 360] 精度:小数点后2位

QDoubleValidator *pDoubleValidator = new QDoubleValidator(this);

pDoubleValidator- setRange(-360, 360);

pDoubleValidator- setNotation(QDoubleValidator::StandardNotation);

pDoubleValidator- setDecimals(2);

// 字符和数字

QRegExp reg("[a-zA-Z0-9]+$");

QRegExpValidator *pValidator = new QRegExpValidator(this);

pValidator- setRegExp(reg);

pIntLineEdit- setValidator(pIntValidator);

pDoubleLineEdit- setValidator(pDoubleValidator);

pValidatorLineEdit- setValidator(pValidator);

要限制用户输入,除了验证器,还可以使用输入掩码,常见的有IP、MAC地址、日期、License号等。


QLineEdit *pIPLineEdit = new QLineEdit(this);

QLineEdit *pMACLineEdit = new QLineEdit(this);

QLineEdit *pDateLineEdit = new QLineEdit(this);

QLineEdit *pLicenseLineEdit = new QLineEdit(this);

pIPLineEdit- setInputMask("000.000.000.000;_");

pMACLineEdit- setInputMask("HH:HH:HH:HH:HH:HH;_");

pDateLineEdit- setInputMask("0000-00-00");

pLicenseLineEdit- setInputMask(" AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#");

使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮、QLineEdit、QSpinBox、QScrollBar中的右键菜单等。通常情况下,我们软件都不会是纯英文的,那么如何处理这些问题呢?其实这也属于国际化的一部分。
Qt+ECharts开发笔记(五):ECharts的动态排序柱状图介绍、基础使用和Qt封装Demo 上一篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口。   本篇的demo实现了自动排序的柱状图,实现了一个自动排序柱状图的基本交互方式,即Qt调用js脚本操作html。   本篇demo使用Qt定时器方式,实现数据定时刷新自增,并预留出了定时器间隔参数。   像大数据网页常看的人口增长时间图,收入年度增长时间图等都是这一类。
Qt+ECharts开发笔记(四):ECharts的饼图介绍、基础使用和Qt封装百分比图Demo 前一篇介绍了横向柱图图。本篇将介绍基础饼图使用,并将其封装一层Qt。本篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口。
Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件 上一篇已经将himpp套入qt的基础上进行开发。那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤。