2012-11-16 29 views

Trả lời

88

QLineEdit::setValidator(), ví dụ:

myLineEdit->setValidator(new QIntValidator(0, 100, this)); 

hoặc

myLineEdit->setValidator(new QDoubleValidator(0, 100, 2, this)) 

Xem: QIntValidator, QDoubleValidator, QLineEdit::setValidator

+4

Điều này có thể được thực hiện từ Nhà thiết kế Qt hay chỉ có thể thông qua mã? – sashoalm

+2

Để hiểu biết của tôi không có cách nào để làm điều này trong thiết kế. – Chris

+0

Đây là giải pháp nhanh nếu bạn cần đầu vào được đưa ra trong ký pháp khoa học (ví dụ: '3.14e-7'). 'QDoubleSpinBox' không chấp nhận số trong ký pháp khoa học (Qt 5.5). –

16

Các tốt nhất là QSpinBox.

Và để sử dụng giá trị gấp đôi QDoubleSpinBox.

QSpinBox myInt; 
myInt.setMinimum(-5); 
myInt.setMaximum(5); 
myInt.setSingleStep(1);// Will increment the current value with 1 (if you use up arrow key) (if you use down arrow key => -1) 
myInt.setValue(2);// Default/begining value 
myInt.value();// Get the current value 
//connect(&myInt, SIGNAL(valueChanged(int)), this, SLOT(myValueChanged(int))); 
+1

Ngay cả khi OP muốn làm việc với QLineEdit, sử dụng QSpinBox chắc chắn là cách tiếp cận tốt nhất. – DrHaze

+1

Điều này hoạt động khi phạm vi số nhỏ. Hãy suy nghĩ về điều đó bạn có thể muốn sử dụng tiện ích này cho độ tuổi hoặc id. – Steve

+0

Bất kỳ cách nào để làm cho bàn phím quay dễ dàng hơn để làm việc chỉ với các phím số, dấu phân cách thập phân và backspace? – Micka

7

Bạn cũng có thể thiết lập một inputMask:

QLineEdit.setInputMask("9") 

này cho phép người dùng gõ chỉ có một chữ số khác nhau, 0-9. Sử dụng nhiều số 9 để cho phép người dùng nhập nhiều số. Xem thêm toàn bộ list of characters that can be used in an input mask.

(câu trả lời của tôi là bằng Python, nhưng nó không phải là khó khăn để biến nó để C++)

5

Tại sao bạn không sử dụng một QSpinBox cho mục đích này? Bạn có thể đặt lên/xuống nút vô hình với dòng sau mã:

// ... 
QSpinBox* spinBox = new QSpinBox(this); 
spinBox->setButtonSymbols(QAbstractSpinBox::NoButtons); // After this it looks just like a QLineEdit. 
//... 
1

Nếu bạn đang sử dụng Qt Creator 5.6 bạn có thể làm điều đó như thế này:

#include <QIntValidator> 

ui->myLineEditName->setValidator(new QIntValidator); 

tôi khuyên bạn đặt mà dòng sau ui-> setupUi (điều này);

Tôi hy vọng điều này sẽ hữu ích.

+4

Yêu cầu hàm tạo của bạn phải là 'new QIntValidator (this)', nếu không thì đối tượng validator sẽ bị rò rỉ ngay khi widget của bạn nằm ngoài phạm vi. – Alexandros

Các vấn đề liên quan