Qt控件如何响应QEvent

来源:互联网 发布:最好的聊天交友软件 编辑:程序博客网 时间:2024/05/22 01:46

目前找到一种有效方法:

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();
}

0 0
原创粉丝点击