Qt控件如何响应QEvent

本文介绍了一种有效方法,在Qt中通过为LineEdit控件安装过滤器并监听焦点事件,实现在获取焦点时弹出键盘,并在关闭按钮点击时使控件失去焦点,从而关闭键盘的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前找到一种有效方法:

1.在窗体上为lineEdit安装过滤器

ui.lineEdit->installEventFilter(this);

2.使用

    bool LineEdit_KB::eventFilter(QObject *watched, QEvent *event)
{
//首先判断控件(这里指 lineEdit)
if ( watched == ui.lineEdit )         
{
//然后再判断控件的具体事件 (这里指获得焦点事件)
if ( event->type() == QEvent::FocusIn )     
{
openKB();
}
// lineEdit控件失去焦点的事件,当Keyboard_Big点击关闭时发送过来的。
  else if ( event->type()==QEvent::FocusOut )    
  {
  ui.lineEdit->clearFocus();
}
}

// 最后将事件交给上层对话框
return QWidget::eventFilter(watched,event);     
}

3. eventFilter()函数可以接收sendEvent()发送过来的事件

    说明:Keyboard_Big是LineEdit_KB的子控件

void Keyboard_Big::on_toolButton_Close_clicked()
{
//若父窗口的当前获得焦点的控件是lineEdit,则使其失去焦点,否则一直会显示键盘,无法关闭键盘。
if ( m_pParent != NULL )
{
QEvent event(QEvent::FocusOut);
QApplication::sendEvent(m_pParent->focusWidget(), &event);
}


close();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值