qt(4)QLineEdit之文本不被选中

http://blog.sina.com.cn/s/blog_a6fb6cc90101b3b8.html

转自上面,分析得很到位。

文本被选中状态有以下几种情况:

1、全选(Ctrl+A)

2、鼠标双击(频繁点击)

3、Shift + Home 组合键

4、Shift + End 组合键

5、Shift + 鼠标点击

6、Tab键切换

7、左、右键

。。。


8,鼠标右键

void PwdLineEdit::contextMenuEvent(QContextMenuEvent *event)
{
    if(event->reason()== QContextMenuEvent::Mouse)
    {
        focusPreviousChild();

        return;
    }
}


涉及的知识点:

1,qt自定义部件,然后在qtdesigner中把对应的部件提升下,

2,重写一些部件的事件函数

void PwdLineEdit::mouseDoubleClickEvent(QMouseEvent *)
{
    return;
}
void PwdLineEdit::mouseMoveEvent(QMouseEvent *)
{
    return;
}
void PwdLineEdit::keyPressEvent(QKeyEvent *event)
{
    if(event->matches(QKeySequence::Copy))
    {
        return;
    }
    else if(event->matches(QKeySequence::SelectAll))
    {
        return;
    }
    else if(event->matches(QKeySequence::Paste))
    {
        return;
    }
    else if(event->key() == Qt::Key_Home)
    {
        this->setCursorPosition(0);
    }
    else if(event->key() == Qt::Key_End)
    {
        this->setCursorPosition(this->text().length());
    }
    else{
        QLineEdit::keyPressEvent(event);
    }

}
void PwdLineEdit::mousePressEvent(QMouseEvent *event)
{
    //鼠标位置
    int curMousePos = cursorPositionAt(event->pos());
    //光标位置
    int curCursorPos = this->cursorPosition();
    if(curMousePos < curCursorPos)
    {
        this->setCursorPosition(curCursorPos-1);
    }
    else if(curMousePos < curMousePos)
    {
        this->setCursorPosition(curCursorPos+1);
    }else
    {
        QLineEdit::mousePressEvent(event);
    }
}

3,事件过滤器

bool loginDlg::eventFilter(QObject *obj, QEvent *event)
{
    if(obj == ui->nameEdit&& event->type() == QEvent::KeyPress)
    {
        QKeyEvent* keyevent = static_cast<QKeyEvent*>(event);
        if(keyevent->key() == Qt::Key_Tab)
        {
            focusNextChild();
            int len = ui->pwdEdit->text().length();
            ui->pwdEdit->setSelection(len,len);
            ui->pwdEdit->setFocus();
            return true;
        }else return false;
    }
    else return false;
}


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值