• 7832阅读
  • 7回复

[提问]怎么设置qwidget(比如lineedit)对键盘(比如回车)的响应? [复制链接]

上一主题 下一主题
离线caiwei_cs
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-21
一个lineedit,我输入一个数,旁边有一个按钮(比如保存)。
我可以按按钮保存数据,也可以输入数据后回车键保存。
方法一,给lineedit装一个事件过滤器,过滤keyPressEvent,如果是回车则保存数据。这个可不可以?
方法二,QLineEdit类本身有个QLineEdit::returnPressed ()信号。关联这个信号,在槽函数里面进行保存操作
不过在我这里有些问题。就是如果我给lineedit加了validator 或者 inputmask ,就不能发送这个信号了。

2)editingFinished():当return返回键被按下或者编辑框失去焦点时发射,需要注意的是如果有validator或者inputMask被设置,其信号只在满足此校验后设置发射。
3)returnPressed()此信号在returnkey或者enterkey被按下的时候。同样需要满足校验器。


QRegExp rx2("[0-9]{4}");    pRevalidator2 = new QRegExpValidator(rx2);    ui->lineEdit_4DA->setValidator(pRevalidator2);
现在问题就转化为,怎么让回车满足校验器或者inputmask?

在线realfan

只看该作者 1楼 发表于: 2014-05-22
把换行符也加到正则表达式中,看行不行
QRegExp rx2("[0-9]{4}\n{0,1}");
在线realfan

只看该作者 2楼 发表于: 2014-05-22
如果再不行,就加上检测textChanged(const QString & text)
遇到\n就触发确认
离线caiwei_cs

只看该作者 3楼 发表于: 2014-05-22
回 realfan 的帖子
realfan:把换行符也加到正则表达式中,看行不行
QRegExp rx2("[0-9]{4}\n{0,1}"); (2014-05-22 08:35) 

这个不知道为什么没有用。
离线caiwei_cs

只看该作者 4楼 发表于: 2014-05-22
回 realfan 的帖子
realfan:如果再不行,就加上检测textChanged(const QString & text)
遇到\n就触发确认 (2014-05-22 08:58) 

这个 参数text是一个整个输入字符串,不是最后一个键值。
貌似抓不到回车键哦
离线征途开始

只看该作者 5楼 发表于: 2014-05-22
用事件吧
在线realfan

只看该作者 6楼 发表于: 2014-05-22
回 caiwei_cs 的帖子
caiwei_cs:这个 参数text是一个整个输入字符串,不是最后一个键值。
貌似抓不到回车键哦[表情] (2014-05-22 10:35) 

每触发textChanged一次,检查整个text包不包含\n
if(ui->lineEdit_4DA->text().endsWith("\n"))
{
........
}
在线realfan

只看该作者 7楼 发表于: 2014-05-22
回 caiwei_cs 的帖子
caiwei_cs:这个不知道为什么没有用。 (2014-05-22 10:34) 

正则表达式还是要带个\n,否则按回车,输入框可能接收到不。然后在textChanged中判断
快速回复
限100 字节
 
上一个 下一个