windows IP Control validation

来源:互联网 发布:选秀是网络词吗 编辑:程序博客网 时间:2024/05/21 09:33
//MyIpPartLineEdit.cpp#include "MyIpPartLineEdit.h"#include#includeMyIpPartLineEdit::MyIpPartLineEdit(QWidget *parent/* = 0*/): QLineEdit(parent){next_tab_ = NULL;this->setMaxLength(3);this->setFrame(false);this->setAlignment(Qt::AlignCenter);QValidator *validator = new QIntValidator(0, 255, this);this->setValidator(validator);connect(this, SIGNAL(textEdited(const QString&)), this, SLOT(text_edited(const QString&)));}MyIpPartLineEdit::~MyIpPartLineEdit(void){}void MyIpPartLineEdit::focusInEvent(QFocusEvent *e){this->selectAll();QLineEdit::focusInEvent(e);}void MyIpPartLineEdit::keyPressEvent(QKeyEvent *event){if (event->key() == Qt::Key_Period){if (next_tab_){next_tab_->setFocus();next_tab_->selectAll();}}QLineEdit::keyPressEvent(event);}void MyIpPartLineEdit::text_edited(const QString& text){QIntValidator v(0, 255, this);QString ipaddr = text;int pos = 0;QValidator::State state = v.validate(ipaddr, pos);if (state == QValidator::Acceptable){if (ipaddr.size() > 1){if (ipaddr.size() == 2){int ipnum = ipaddr.toInt();if (ipnum > 25){if (next_tab_){next_tab_->setFocus();next_tab_->selectAll();}}}else{if (next_tab_){next_tab_->setFocus();next_tab_->selectAll();}}}}}///////////////////////////////////////////////////////////////////////////////////MyIpPartLineEdit.h#ifndef MYIPPARTLINEEDIT_H#define MYIPPARTLINEEDIT_H// MyIpPartLineEdit.h#pragma once#includeclass QWidget;class QFocusEvent;class QKeyEvent;class MyIpPartLineEdit : public QLineEdit{Q_OBJECTpublic:MyIpPartLineEdit(QWidget *parent = 0);~MyIpPartLineEdit(void);void set_nexttab_edit(QLineEdit *nexttab) { next_tab_ = nexttab; }protected:virtual void focusInEvent(QFocusEvent *e);virtual void keyPressEvent(QKeyEvent *event);private slots:void text_edited(const QString& text);private:QLineEdit *next_tab_;};#endif // MYIPPARTLINEEDIT_H/////////////////////////////////////////////////////////////////////////////////MyIpAddrEdit.cpp#include "MyIpAddrEdit.h"#include#include#include "MyIpPartLineEdit.h"MyIpAddrEdit::MyIpAddrEdit(QWidget* pParent /* = 0 */): QWidget(pParent){ip_part1_ = new MyIpPartLineEdit(this);ip_part2_ = new MyIpPartLineEdit(this);ip_part3_ = new MyIpPartLineEdit(this);ip_part4_ = new MyIpPartLineEdit(this);labeldot1_ = new QLabel(this);labeldot2_ = new QLabel(this);labeldot3_ = new QLabel(this);ip_part1_->setGeometry(QRect(0, 0, 30, 20));ip_part2_->setGeometry(QRect(30, 0, 30, 20));ip_part3_->setGeometry(QRect(60, 0, 30, 20));ip_part4_->setGeometry(QRect(90, 0, 30, 20));labeldot1_->setText(" .");labeldot1_->setGeometry(QRect(27, 1, 6, 18));labeldot1_->setAlignment(Qt::AlignCenter);labeldot2_->setText(" .");labeldot2_->setGeometry(QRect(57, 1, 6, 18));labeldot2_->setAlignment(Qt::AlignCenter);labeldot3_->setText(" .");labeldot3_->setGeometry(QRect(87, 1, 6, 18));labeldot3_->setAlignment(Qt::AlignCenter);QWidget::setTabOrder(ip_part1_, ip_part2_);QWidget::setTabOrder(ip_part2_, ip_part3_);QWidget::setTabOrder(ip_part3_, ip_part4_);ip_part1_->set_nexttab_edit(ip_part2_);ip_part2_->set_nexttab_edit(ip_part3_);ip_part3_->set_nexttab_edit(ip_part4_);connect(ip_part1_, SIGNAL(textChanged(const QString&)), this, SLOT(textchangedslot(const QString&)));connect(ip_part2_, SIGNAL(textChanged(const QString&)), this, SLOT(textchangedslot(const QString&)));connect(ip_part3_, SIGNAL(textChanged(const QString&)), this, SLOT(textchangedslot(const QString&)));connect(ip_part4_, SIGNAL(textChanged(const QString&)), this, SLOT(textchangedslot(const QString&)));connect(ip_part1_, SIGNAL(textEdited (const QString&)), this, SLOT(texteditedslot(const QString&)));connect(ip_part2_, SIGNAL(textEdited (const QString&)), this, SLOT(texteditedslot(const QString&)));connect(ip_part3_, SIGNAL(textEdited (const QString&)), this, SLOT(texteditedslot(const QString&)));connect(ip_part4_, SIGNAL(textEdited (const QString&)), this, SLOT(texteditedslot(const QString&)));}MyIpAddrEdit::~MyIpAddrEdit(){}void MyIpAddrEdit::textchangedslot(const QString& /*text*/){QString ippart1, ippart2, ippart3, ippart4;ippart1 = ip_part1_->text();ippart2 = ip_part2_->text();ippart3 = ip_part3_->text();ippart4 = ip_part4_->text();QString ipaddr = QString("%1.%2.%3.%4").arg(ippart1).arg(ippart2).arg(ippart3).arg(ippart4);emit textchanged(ipaddr);}void MyIpAddrEdit::texteditedslot(const QString &/*text*/){QString ippart1, ippart2, ippart3, ippart4;ippart1 = ip_part1_->text();ippart2 = ip_part2_->text();ippart3 = ip_part3_->text();ippart4 = ip_part4_->text();QString ipaddr = QString("%1.%2.%3.%4").arg(ippart1).arg(ippart2).arg(ippart3).arg(ippart4);emit textedited(ipaddr);}void MyIpAddrEdit::settext(const QString &text){QString ippart1, ippart2, ippart3, ippart4;QString qstring_validate = text;// IP地址验证QRegExp regexp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");QRegExpValidator regexp_validator(regexp, this);int nPos = 0;QValidator::State state = regexp_validator.validate(qstring_validate, nPos);// IP合法if (state == QValidator::Acceptable){QStringList ippartlist = text.split(".");int strcount = ippartlist.size();int index = 0;if (index < strcount){ippart1 = ippartlist.at(index);}if (++index < strcount){ippart2 = ippartlist.at(index);}if (++index < strcount){ippart3 = ippartlist.at(index);}if (++index < strcount){ippart4 = ippartlist.at(index);}}ip_part1_->setText(ippart1);ip_part2_->setText(ippart2);ip_part3_->setText(ippart3);ip_part4_->setText(ippart4);}QString MyIpAddrEdit::text(){QString ippart1, ippart2, ippart3, ippart4;ippart1 = ip_part1_->text();ippart2 = ip_part2_->text();ippart3 = ip_part3_->text();ippart4 = ip_part4_->text();return QString("%1.%2.%3.%4").arg(ippart1).arg(ippart2).arg(ippart3).arg(ippart4);}void MyIpAddrEdit::setStyleSheet(const QString &styleSheet){ip_part1_->setStyleSheet(styleSheet);ip_part2_->setStyleSheet(styleSheet);ip_part3_->setStyleSheet(styleSheet);ip_part4_->setStyleSheet(styleSheet);}/////////////////////////////////////////////////////////////////////////////////////MyIpAddrEdit.h#ifndef MYIPADDREDIT_H#define MYIPADDREDIT_H#pragma once#includeclass QLineEdit;class QLabel;class MyIpPartLineEdit;class MyIpAddrEdit : public QWidget{Q_OBJECTpublic:MyIpAddrEdit(QWidget* pParent = 0);~MyIpAddrEdit();void settext(const QString &text);QString text();void setStyleSheet(const QString &styleSheet);signals:void textchanged(const QString& text);void textedited(const QString &text);private slots:void textchangedslot(const QString& text);void texteditedslot(const QString &text);private:MyIpPartLineEdit *ip_part1_;MyIpPartLineEdit *ip_part2_;MyIpPartLineEdit *ip_part3_;QLineEdit *ip_part4_;QLabel *labeldot1_;QLabel *labeldot2_;QLabel *labeldot3_;};#endif // MYIPADDREDIT_H////////////////////////////////////////////////////////////////////////////////main.cpp#include#include#include "MyIpAddrEdit.h"int main(int argc, char *argv[]){QApplication app(argc, argv);QDialog *my_dialog = new QDialog;MyIpAddrEdit *ipAddr = new MyIpAddrEdit(my_dialog);ipAddr->settext("127.0.0.1");my_dialog->show();return app.exec();}/////////////////////////////////////////////////////////////

原创粉丝点击