天天看点

QT开发之QLineEdit

1、设置输入限制

QLineEdit lineedit = new QLineEdit(this);
QRegExp rx("([a-zA-Z0-9])+([0])");//设置为只能输入数字和英文
QRegExpValidator *pRevalidotor = new QRegExpValidator(rx,this);
lineedit->setValidator(pRevalidotor);
lineedit->setMaxLength(10);  //设置lineEdit最大长度
           

2、有时候限制判断比如10-100;这个时候就需要使用输入完成判断来判断输入的值是否为0-9

即使用editingFinished()信号光标进入和离开编辑框来进行判断数据,这个时候序号设置为范围是0-100,设置<10的时候=10,当输入0-9时才会发送这个信号

注:记得设置窗口为Qt::ClickFocus 0x2 接受鼠标单击做焦点

enum Qt::FocusPolicy

This enum type defines the various policies a widget can have with respect to acquiring keyboard focus.

Constant Value Description

Qt::TabFocus 0x1  接受Tab键焦点

Qt::ClickFocus 0x2 接受鼠标单击做焦点

Qt::StrongFocus TabFocus | ClickFocus | 0x8 接受Tab键和鼠标单击做焦点

Qt::WheelFocus StrongFocus | 0x4  滑轮作为焦点选中事件

Qt::NoFocus 0 不接受焦点

QT开发之QLineEdit

3、输入小数

lineedit->setValidator(new QDoubleValidator(-100.0,100.0,2,this));//其中2表示只能输入2位小数

4、获取焦点状态

QLineEdit中因为QLineEdit::editingFinished存在一些问题,输入的值不在范围内焦点离开时就不会发送信号。

第一种方法:

新建C++ clss,重写QLineEdit类,

focusInEvent(QFocusEvent *e)//焦点进入进入时信号

focusOutEvent(QFocusEvent *e)//为焦点离开时信号

在focusOutEvent内进行判断离开时编辑框中的数据是否正确

第二种方法:

使用过滤器,

在创建编辑框后添加

ui->lineEdit1->installEventFilter(this);  //在窗体上为lineEdit1安装过滤器
           
bool Core::eventFilter(QObject *watched, QEvent *event)
{
     if (watched==ui->lineEdit1)         //首先判断控件(这里指 lineEdit1)
     {
          if (event->type()==QEvent::FocusIn)     //然后再判断控件的具体事件 (这里指获得焦点事件)
          {
              QPalette p=QPalette();
              p.setColor(QPalette::Base,Qt::green);
              ui->lineEdit1->setPalette(p);
          }
          else if (event->type()==QEvent::FocusOut)    // 这里指 lineEdit1 控件的失去焦点事件
          {
              QPalette p=QPalette();
              p.setColor(QPalette::Base,Qt::white);
              ui->lineEdit1->setPalette(p);
           }
     }
     return QWidget::eventFilter(watched,event);     // 最后将事件交给上层对话框
}
           

在焦点离开处判断编辑框中内容是否正确

5、设置无边框透明和提示

ui->lineEdit->setStyleSheet("QLineEdit{background-color:transparent}"//透明
                                      "QLineEdit{border-width:0;border-style:outset}");//无边框
    ui->lineEdit->setPlaceholderText("a-z A-Z 0-9 - and Space");//提示
           

6、设备光标在编辑框中和全选

ui->lineEdit->setFocus();
QTimer::singleShot(0, ui->lineEdit, &QLineEdit::selectAll);
           

继续阅读