天天看點

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

繼續閱讀