qt qlineedit 输入框 输入面板 软键盘 eventfilter 改变窗口位置 it |
|
1.定义一个事件过滤器
bool myDialog::eventFilter(QObject* o, QEvent* e)
{
if((e->type()==QEvent::MouseButtonPress)&&(o==lineEdit))
{
updataPosition();//让输入面板正好显示在输入框的下方
inputPanel.show();
return true;
}
else returnQDialog::eventFilter(o, e);
}
2.对输入框安装事件过滤器,lineEdit->installEventFilter(this);OK.
3.窗口位置更新函数updataPosition()的实现
void myDialog::updatePosition()
{
QWidget*widget=focusWidget();//获取当前焦点所在控件
if (!widget)
return;
QRectwidgetRect=widget->rect();//获取控件的几何信息,即宽高
QPointpanelPos=QPoint(widgetRect.left(),widgetRect.bottom());//以控件的左上角为原点,空间的左下角的坐标
panelPos=widget->mapToGlobal(panelPos);//转换为全局即以整个屏幕的左上角为原点的坐标
input.move(panelPos);//输入面板的左上角移动到该坐标下
}