void MainWidget::lineedit_changed(const QString &str){ int i =0; QString st = str; if (lineedit->validator()->validate(st, i) != QValidator::Invalid) lineedit->setStyleSheet("background: green"); else lineedit->setStyleSheet("background: red");}
QDoubleValidator *val = new QDoubleValidator(0, 100, 3, lineedit); val->setNotation( QDoubleValidator::ScientificNotation); lineedit->setValidator(val); connect(lineedit,SIGNAL(editingFinished()),this,SLOT(lineedit_entered())); connect(lineedit,SIGNAL(textChanged( const QString &)),this,SLOT(lineedit_changed( const QString &)));
signalMapper = new QSignalMapper(this); setConnectForSignalMapper(this); connect(signalMapper, SIGNAL(mapped(QWidget *)), this, SLOT(signalMapper_mapped(QWidget *)));
void MainWindowImpl::setConnectForSignalMapper(QWidget *wgt){ foreach (QWidget *wgt2, wgt->findChildren<QWidget *>()){ if (wgt2->children().size()) setConnectForSignalMapper(wgt2); QLineEdit *le =qobject_cast<QLineEdit *>(wgt2); if (le != 0){ connect(le,SIGNAL(textChanged( const QString &)),signalMapper, SLOT(map())); signalMapper->setMapping(le,le); } }}
void MainWindowImpl::signalMapper_mapped(QWidget *wgt){ QLineEdit *le = qobject_cast<QLineEdit *>(wgt); if (le == 0) return; int i =0; QString st = le->text(); if (le->validator()->validate(st, i) == QValidator::Acceptable){ le->setStyleSheet("background: white"); btnCalc->setEnabled(true); // разблокируем кнопку }else{ le->setStyleSheet("background: red"); btnCalc->setEnabled(false); // блокируем кнопку } fileIsSaved = false;}
#include <QtGui>#include <QDebug>#include "window.h"Window::Window(){ QGroupBox *echoGroup = new QGroupBox(tr("Echo")); QLabel *echoLabel = new QLabel(tr("Mode:")); QComboBox *echoComboBox = new QComboBox; echoComboBox->addItem(tr("Normal")); echoComboBox->addItem(tr("Password")); echoComboBox->addItem(tr("PasswordEchoOnEdit")); echoComboBox->addItem(tr("No Echo")); echoLineEdit = new QLineEdit; echoLineEdit->setFocus(); QGroupBox *validatorGroup = new QGroupBox(tr("Validator")); QLabel *validatorLabel = new QLabel(tr("Type:")); QComboBox *validatorComboBox = new QComboBox; validatorComboBox->addItem(tr("No validator")); validatorComboBox->addItem(tr("Integer validator")); validatorComboBox->addItem(tr("Double validator")); validatorLineEdit = new QLineEdit; QGroupBox *alignmentGroup = new QGroupBox(tr("Alignment")); QLabel *alignmentLabel = new QLabel(tr("Type:")); QComboBox *alignmentComboBox = new QComboBox; alignmentComboBox->addItem(tr("Left")); alignmentComboBox->addItem(tr("Centered")); alignmentComboBox->addItem(tr("Right")); alignmentLineEdit = new QLineEdit; QGroupBox *inputMaskGroup = new QGroupBox(tr("Input mask")); QLabel *inputMaskLabel = new QLabel(tr("Type:")); QComboBox *inputMaskComboBox = new QComboBox; inputMaskComboBox->addItem(tr("No mask")); inputMaskComboBox->addItem(tr("Phone number")); inputMaskComboBox->addItem(tr("ISO date")); inputMaskComboBox->addItem(tr("License key")); inputMaskLineEdit = new QLineEdit; QGroupBox *accessGroup = new QGroupBox(tr("Access")); QLabel *accessLabel = new QLabel(tr("Read-only:")); QComboBox *accessComboBox = new QComboBox; accessComboBox->addItem(tr("False")); accessComboBox->addItem(tr("True")); accessLineEdit = new QLineEdit; connect(echoComboBox, SIGNAL(activated(int)), this, SLOT(echoChanged(int))); connect(validatorComboBox, SIGNAL(activated(int)), this, SLOT(validatorChanged(int))); connect(alignmentComboBox, SIGNAL(activated(int)), this, SLOT(alignmentChanged(int))); connect(inputMaskComboBox, SIGNAL(activated(int)), this, SLOT(inputMaskChanged(int))); connect(accessComboBox, SIGNAL(activated(int)), this, SLOT(accessChanged(int))); connect(validatorLineEdit,SIGNAL(textChanged( const QString &)),this,SLOT(validate_changed( const QString &))); QGridLayout *echoLayout = new QGridLayout; echoLayout->addWidget(echoLabel, 0, 0); echoLayout->addWidget(echoComboBox, 0, 1); echoLayout->addWidget(echoLineEdit, 1, 0, 1, 2); echoGroup->setLayout(echoLayout); QGridLayout *validatorLayout = new QGridLayout; validatorLayout->addWidget(validatorLabel, 0, 0); validatorLayout->addWidget(validatorComboBox, 0, 1); validatorLayout->addWidget(validatorLineEdit, 1, 0, 1, 2); validatorGroup->setLayout(validatorLayout); QGridLayout *alignmentLayout = new QGridLayout; alignmentLayout->addWidget(alignmentLabel, 0, 0); alignmentLayout->addWidget(alignmentComboBox, 0, 1); alignmentLayout->addWidget(alignmentLineEdit, 1, 0, 1, 2); alignmentGroup-> setLayout(alignmentLayout); QGridLayout *inputMaskLayout = new QGridLayout; inputMaskLayout->addWidget(inputMaskLabel, 0, 0); inputMaskLayout->addWidget(inputMaskComboBox, 0, 1); inputMaskLayout->addWidget(inputMaskLineEdit, 1, 0, 1, 2); inputMaskGroup->setLayout(inputMaskLayout); QGridLayout *accessLayout = new QGridLayout; accessLayout->addWidget(accessLabel, 0, 0); accessLayout->addWidget(accessComboBox, 0, 1); accessLayout->addWidget(accessLineEdit, 1, 0, 1, 2); accessGroup->setLayout(accessLayout); QGridLayout *layout = new QGridLayout; layout->addWidget(echoGroup, 0, 0); layout->addWidget(validatorGroup, 1, 0); layout->addWidget(alignmentGroup, 2, 0); layout->addWidget(inputMaskGroup, 0, 1); layout->addWidget(accessGroup, 1, 1); setLayout(layout); setWindowTitle(tr("Line Edits"));}void Window::echoChanged(int index){ switch (index) { case 0: echoLineEdit->setEchoMode(QLineEdit::Normal); break; case 1: echoLineEdit->setEchoMode(QLineEdit::Password); break; case 2: echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit); break; case 3: echoLineEdit->setEchoMode(QLineEdit::NoEcho); }}void Window::validatorChanged(int index){ switch (index) { case 0: validatorLineEdit->setValidator(0); break; case 1: validatorLineEdit->setValidator(new QIntValidator( validatorLineEdit)); break; case 2: validatorLineEdit->setValidator(new QDoubleValidator(-999.0, 999.0, 2, validatorLineEdit)); } validatorLineEdit->clear();}void Window::alignmentChanged(int index){ switch (index) { case 0: alignmentLineEdit->setAlignment(Qt::AlignLeft); break; case 1: alignmentLineEdit->setAlignment(Qt::AlignCenter); break; case 2: alignmentLineEdit->setAlignment(Qt::AlignRight); }}void Window::inputMaskChanged(int index){ switch (index) { case 0: inputMaskLineEdit->setInputMask(""); break; case 1: inputMaskLineEdit->setInputMask("+99 99 99 99 99;_"); break; case 2: inputMaskLineEdit->setInputMask("0000-00-00"); inputMaskLineEdit->setText("00000000"); inputMaskLineEdit->setCursorPosition(0); break; case 3: inputMaskLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#"); }}void Window::accessChanged(int index){ switch (index) { case 0: accessLineEdit->setReadOnly(false); break; case 1: accessLineEdit->setReadOnly(true); }}void Window::validate_changed(const QString &str) { qDebug() << "vc "<<str; }
QLocale::setDefault(QLocale::C); d = QString( "1234,56" ).toDouble(&ok); // ok == false