2012-11-16 14 views
57

स्वीकार करने के लिए QLineEdit सेट करें मेरे पास QLineEdit है जहां उपयोगकर्ता को केवल संख्याओं को इनपुट करना चाहिए।केवल संख्या

तो क्या QLineEdit के लिए केवल संख्याओं की सेटिंग है?

उत्तर

88

QLineEdit::setValidator(), उदाहरण के लिए:

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

या

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

देखें: QIntValidator, QDoubleValidator, QLineEdit::setValidator

+4

क्या यह क्यूटी डिजाइनर से किया जा सकता है, या यह केवल कोड के माध्यम से संभव है? – sashoalm

+2

मेरे ज्ञान के लिए डिजाइनर में ऐसा करने का कोई तरीका नहीं है। – Chris

+0

यदि आपको वैज्ञानिक नोटेशन में दिए गए इनपुट की आवश्यकता है तो यह एक त्वरित समाधान है (उदा।, '3.14e-7')। 'QDoubleSpinBox' वैज्ञानिक नोटेशन (क्यूटी 5.5) में संख्या स्वीकार नहीं करता है। –

16

सबसे अच्छा QSpinBox है।

और डबल मान उपयोग के लिए 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

भले ही ओपी एक QLineEdit के साथ काम करना चाहता है, क्यूएसपीनबॉक्स का उपयोग करना निश्चित रूप से सबसे अच्छा तरीका है। – DrHaze

+1

यह तब काम करता है जब संख्या सीमा छोटी होती है। इस बारे में सोचें कि आप इस विजेट का उपयोग उम्र या आईडी के लिए करना चाहेंगे। – Steve

+0

स्पिनबॉक्स को केवल कुंजी कुंजी, दशमलव विभाजक और बैकस्पेस के साथ काम करने के लिए अधिक कीबोर्ड अनुकूल बनाने का कोई तरीका है? – Micka

7

तुम भी एक inputMask सेट कर सकते हैं:

QLineEdit.setInputMask("9") 

यह उपयोगकर्ता केवल एक 0 से 9 को लेकर अंकों टाइप करने के लिए अनुमति देता है। उपयोगकर्ता को एकाधिक संख्याएं दर्ज करने की अनुमति देने के लिए एकाधिक 9 का उपयोग करें। पूरा list of characters that can be used in an input mask भी देखें।

(मेरा जवाब अजगर में है, लेकिन यह सेल्सियस के लिए यह ++ को बदलने के लिए मुश्किल नहीं होना चाहिए)

5

क्यों आप इस उद्देश्य के लिए एक QSpinBox का उपयोग नहीं करते?

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

आप क्यूटी निर्माता 5.6 उपयोग कर रहे हैं आपको लगता है कि इस तरह से कर सकते हैं:: आप कोड की निम्न पंक्ति के साथ अदृश्य ऊपर/नीचे बटन सेट कर सकते हैं

#include <QIntValidator> 

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

मैं सिफारिश आपको लगता है कि डाल ui-> setupUi (यह) के बाद लाइन;

मुझे उम्मीद है कि इससे मदद मिलती है।

+4

आपका कन्स्ट्रक्टर आमंत्रण 'नया QIntValidator (यह) 'होना चाहिए, अन्यथा आपका विजेट स्कोप से बाहर निकलने पर सत्यापनकर्ता ऑब्जेक्ट रिसाव हो जाएगा। – Alexandros

संबंधित मुद्दे