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 不接受焦點
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);