qt实现点击输入框弹出输入面板和改变窗口的位置

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);//输入面板的左上角移动到该坐标下
}

你可能感兴趣的:(qt)