Qt实现的IP地址输入控件

来源:互联网 发布:erdai cms 编辑:程序博客网 时间:2024/05/21 22:58
// MyIpPartLineEdit.h 
#pragma once #include <QLineEdit> class QWidget; class QFocusEvent; class QKeyEvent; class MyIpPartLineEdit : public QLineEdit {     Q_OBJECT public:     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_; }; 


// MyIpPartLineEdit.cpp #include "MyIpPartLineEdit.h" #include <QIntValidator> #include <QKeyEvent> MyIpPartLineEdit::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();                 }                 }         }     } }

// MyIpAddrEdit.h #pragma once #include <QWidget> class QLineEdit; class QLabel; class MyIpPartLineEdit; class MyIpAddrEdit : public QWidget {     Q_OBJECT public:     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_; };

// MyIpAddrEdit.cpp #include "MyIpAddrEdit.h" #include <QRegExpValidator> #include <QLabel> #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); }

//main.cpp#include <QApplication> #include <QDialog> #include "MyIpAddrEdit.h"int main(int argc, char *argv[]) {     QApplication app(argc, argv);    MyIpAddrEdit *ipAddr = new MyIpAddrEdit();     ipAddr->settext("127.0.0.1");     ipAddr->show();    return app.exec(); }


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 亚麻裤缩水了怎么办 怎么办一个人保定损点 淘宝遇到职业敲诈怎么办 三无燕窝被打假怎么办 碰上职业打假的怎么办 遇到专业打假的怎么办 手机wifi被劫持怎么办 手机网页乱跳怎么办 老公说话不算话怎么办 编曲接不到活怎么办 电表显示跳闸黄灯怎么办 硫酸铬钾中毒怎么办 门锁能扭动却打不开怎么办 防盗门保险坏了怎么办 厦门工会卡过期怎么办 阴雨天被子受潮怎么办 衣服晾臭了怎么办 喷砂机油水分离泵有油怎么办 水太烫玻璃瓶盖打不开怎么办 玻璃罐的玻璃盖打不开怎么办? 开红酒没有开瓶器怎么办 手机卡突然坏了怎么办 滚筒洗衣机打不开门怎么办 全自动洗衣机门开不开怎么办 好期待评分不足怎么办 单片机数码管亮度低怎么办 猫的同轴灯不亮怎么办 楼下邻居太吵怎么办 冰箱冷却液内露怎么办 冷却水没有了会怎么办 金立m7信号不好怎么办 csgo凉了饰品怎么办 模型拟合度低怎么办 石膏线用发泡胶怎么办 电表上显示err10怎么办 电表显示欠压怎么办 tcl电视遥控器失灵怎么办 玩具汽车遥控器失灵怎么办 玩具车遥控丢了怎么办 按压扣坏了怎么办 电脑用不了鼠标怎么办