मेरे पास एक ऐसा स्थान है QLineEdit
जहां उपयोगकर्ता को केवल संख्याओं का इनपुट करना चाहिए।
तो क्या केवल नंबर के लिए ही सेटिंग है QLineEdit
?
जवाबों:
QLineEdit::setValidator()
, उदाहरण के लिए:
myLineEdit->setValidator( new QIntValidator(0, 100, this) );
या
myLineEdit->setValidator( new QDoubleValidator(0, 100, 2, this) );
देखें: QIntValidator , QDoubleValidator , QLineEdit :: setValidator
3.14e-7
) में दिए गए इनपुट की आवश्यकता है । QDoubleSpinBox
वैज्ञानिक अंकन में संख्या स्वीकार नहीं करता है (Qt 5.5)।
सबसे अच्छा है 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)));
द रेगेक्स वैलिडेटर
अब तक, अन्य उत्तर केवल एक अपेक्षाकृत के लिए समाधान प्रदान परिमित अंकों की संख्या। हालाँकि, यदि आप एक मनमाने ढंग से या अंकों की एक चर संख्या के साथ संबंध रखते हैं, तो आप एक का उपयोग कर सकते हैं QRegExpValidator
, एक regex जो केवल अंकों को स्वीकार करता है (जैसा कि user2962533 की टिप्पणी के अनुसार नोट किया गया है )। यहाँ एक न्यूनतम, पूर्ण उदाहरण है:
#include <QApplication>
#include <QLineEdit>
#include <QRegExpValidator>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLineEdit le;
le.setValidator(new QRegExpValidator(QRegExp("[0-9]*"), &le));
le.show();
return app.exec();
}
QRegExpValidator
इसके लाभों पर है (और है कि केवल एक ख़ामोश है)। यह अन्य उपयोगी मान्यताओं के एक समूह के लिए अनुमति देता है:
QRegExp("[1-9][0-9]*") // leading digit must be 1 to 9 (prevents leading zeroes).
QRegExp("\\d*") // allows matching for unicode digits (e.g. for
// Arabic-Indic numerals such as ٤٥٦).
QRegExp("[0-9]+") // input must have at least 1 digit.
QRegExp("[0-9]{8,32}") // input must be between 8 to 32 digits (e.g. for some basic
// password/special-code checks).
QRegExp("[0-1]{,4}") // matches at most four 0s and 1s.
QRegExp("0x[0-9a-fA-F]") // matches a hexadecimal number with one hex digit.
QRegExp("[0-9]{13}") // matches exactly 13 digits (e.g. perhaps for ISBN?).
QRegExp("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}")
// matches a format similar to an ip address.
// N.B. invalid addresses can still be entered: "999.999.999.999".
लाइन-एडिट बिहेवियर पर अधिक
प्रलेखन के अनुसार :
ध्यान दें कि यदि लाइन एडिट पर वैलिडेटर सेट है, तो रिटर्नपार्टेड () / एडिटिंगफिनिश्ड () सिग्नल्स केवल तभी उत्सर्जित होंगे, जब वैलिडेटर QValidator लौटाता है :: स्वीकार्य।
इस प्रकार, लाइन-एडिट उपयोगकर्ता को इनपुट अंकों की अनुमति देगा भले ही न्यूनतम राशि अभी तक नहीं पहुंची हो। उदाहरण के लिए, भले ही उपयोगकर्ता ने regex "[0-9]{3,}"
(जिसमें कम से कम 3 अंकों की आवश्यकता हो) के खिलाफ कोई पाठ इनपुट नहीं किया है , लाइन-एडिट अभी भी उपयोगकर्ता को उस न्यूनतम आवश्यकता तक पहुंचने के लिए इनपुट टाइप करने की अनुमति देता है । हालांकि, यदि उपयोगकर्ता "कम से कम 3 अंकों" की आवश्यकता को बताए बिना संपादन समाप्त करता है, तो इनपुट अमान्य होगा ; संकेतों returnPressed()
और editingFinished()
उत्सर्जित नहीं किया जाएगा।
यदि रेगेक्स में अधिकतम-बाध्य (जैसे "[0-1]{,4}"
) था, तो लाइन-एडिट किसी भी इनपुट को पिछले 4 वर्णों को रोक देगा। साथ ही, वर्ण सेट (यानी के लिए [0-9]
, [0-1]
, [0-9A-F]
, आदि) लाइन से संपादित केवल अनुमति देता से पात्रों कि विशेष सेट डाले जा सकते हैं।
ध्यान दें कि मैंने केवल Qt 5.11 के साथ एक macOS पर इसका परीक्षण किया है, अन्य Qt संस्करणों या ऑपरेटिंग सिस्टम पर नहीं। लेकिन Qt के क्रॉस-प्लेटफॉर्म स्कीमा को देखते हुए ...
डेमो: रेगेक्स वैलिडेटर्स शोकेस
आप यह भी सेट कर सकते हैं inputMask
:
QLineEdit.setInputMask("9")
इससे उपयोगकर्ता केवल एक अंक टाइप 0
कर सकता है 9
। 9
उपयोगकर्ता को कई नंबरों को दर्ज करने की अनुमति देने के लिए कई का उपयोग करें । उन पात्रों की पूरी सूची भी देखें जिन्हें इनपुट मास्क में इस्तेमाल किया जा सकता है ।
(मेरा जवाब अजगर में है, लेकिन इसे C ++ में बदलना मुश्किल नहीं होना चाहिए)
यदि आप क्यूटी क्रिएटर 5.6 का उपयोग कर रहे हैं तो आप ऐसा कर सकते हैं:
#include <QIntValidator>
ui->myLineEditName->setValidator( new QIntValidator);
मुझे लगता है कि आप उस लाइन को ui-> setupUi (यह) के बाद डालेंगे;
आशा है कि ये आपकी मदद करेगा।
new QIntValidator(this)
, अन्यथा जैसे ही आपका विजेट स्कोप के दायरे से बाहर जाएगा , वैलिडेटर ऑब्जेक्ट लीक हो जाएगा।