QT 实现自定义的IP地址控件
来源:互联网 发布:黑魂3男捏脸数据 编辑:程序博客网 时间:2024/05/21 11:08
此IP输入控件支持可通过tab,值大于255,点击.按钮,或者左右键切换等来实现切换输入框。
单个输入框功能,限制大小0-255;
#ifndef CMYIPPARTLINEEDIT_H#define CMYIPPARTLINEEDIT_H#include <QLineEdit>class CMyIpPartLineEdit : public QLineEdit{Q_OBJECTpublic:CMyIpPartLineEdit(QWidget *parent = 0,int nType = 0);~CMyIpPartLineEdit();void set_nexttab_edit(QLineEdit *nexttab) { next_tab_ = nexttab; }void setEditCursorPosition(int nType);public:signals:void keyPressLeftOrRight(int,int);protected:virtual void focusInEvent(QFocusEvent *e);virtual void keyPressEvent(QKeyEvent *event); private slots:void text_edited(const QString& text);private:QLineEdit *next_tab_;int m_nType;};#endif // CMYIPPARTLINEEDIT_H
#include "CMyIpPartLineEdit.h"#include <QIntValidator>#include <QKeyEvent>CMyIpPartLineEdit::CMyIpPartLineEdit(QWidget *parent/* = 0*/,int nType): 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);switch(nType){case 0://第一个setStyleSheet("QLineEdit{border-right:0px;}");break;case 1://第二个setStyleSheet("QLineEdit{border-left:0px;border-right:0px;}");break;case 2://第三个setStyleSheet("QLineEdit{border-left:0px;border-right:0px;}");break;case 3:setStyleSheet("QLineEdit{border-left:0px;}");break;}m_nType = nType;connect(this, SIGNAL(textEdited(const QString&)), this, SLOT(text_edited(const QString&)));}CMyIpPartLineEdit::~CMyIpPartLineEdit(void){}void CMyIpPartLineEdit::focusInEvent(QFocusEvent *e){this->selectAll();QLineEdit::focusInEvent(e);}void CMyIpPartLineEdit::keyPressEvent(QKeyEvent *event){if (event->key() == Qt::Key_Period){if (next_tab_){next_tab_->setFocus();next_tab_->selectAll();}}else if (event->key() == Qt::Key_Left){if (cursorPosition() == 0&&m_nType!=0){emit keyPressLeftOrRight((int)Qt::Key_Left,m_nType-1);}}else if (event->key() == Qt::Key_Right){if (cursorPosition() == text().size()&&m_nType!=3){emit keyPressLeftOrRight((int)Qt::Key_Right,m_nType+1);}}QLineEdit::keyPressEvent(event);}void CMyIpPartLineEdit::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();} }}}}void CMyIpPartLineEdit::setEditCursorPosition(int nType){setFocus();int nSize = 0;if (nType == Qt::Key_Left){nSize = text().size();}setCursorPosition(nSize);}
#ifndef CMYIPADDREDIT_H#define CMYIPADDREDIT_H#include <QWidget>#include <QLabel>#include <QResizeEvent>#include "cmyippartlineedit.h"class CMyIpAddrEdit : public QWidget{Q_OBJECTpublic:CMyIpAddrEdit(QWidget *parent = 0);~CMyIpAddrEdit();void setText(const QString &text);QString text();void setStyleSheet(const QString &styleSheet);void setEnabled(bool);signals:void textchanged(const QString& text);void textedited(const QString &text);public slots:void onKeyPressLeftOrRight(int,int);protected:void resizeEvent(QResizeEvent* event);private slots:void textchangedslot(const QString& text);void texteditedslot(const QString &text);private:CMyIpPartLineEdit *ip_part1_;CMyIpPartLineEdit *ip_part2_;CMyIpPartLineEdit *ip_part3_;CMyIpPartLineEdit *ip_part4_;QLabel *labeldot1_;QLabel *labeldot2_; QLabel *labeldot3_;};#endif // CMYIPADDREDIT_H
#include "cmyipaddredit.h"#include <QValidator>CMyIpAddrEdit::CMyIpAddrEdit(QWidget *parent): QWidget(parent){ip_part1_ = new CMyIpPartLineEdit(this,0);ip_part2_ = new CMyIpPartLineEdit(this,1);ip_part3_ = new CMyIpPartLineEdit(this,2);ip_part4_ = new CMyIpPartLineEdit(this,3);labeldot1_ = new QLabel(this);labeldot2_ = new QLabel(this);labeldot3_ = new QLabel(this);labeldot1_->setText(" .");labeldot1_->setAlignment(Qt::AlignCenter);labeldot2_->setText(" .");labeldot2_->setAlignment(Qt::AlignCenter);labeldot3_->setText(" .");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&)));connect(ip_part1_, SIGNAL(keyPressLeftOrRight(int,int)), this, SLOT(onKeyPressLeftOrRight(int,int)));connect(ip_part2_, SIGNAL(keyPressLeftOrRight(int,int)), this, SLOT(onKeyPressLeftOrRight(int,int)));connect(ip_part3_, SIGNAL(keyPressLeftOrRight(int,int)), this, SLOT(onKeyPressLeftOrRight(int,int)));connect(ip_part4_, SIGNAL(keyPressLeftOrRight(int,int)), this, SLOT(onKeyPressLeftOrRight(int,int)));}CMyIpAddrEdit::~CMyIpAddrEdit(){}void CMyIpAddrEdit::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 CMyIpAddrEdit::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 CMyIpAddrEdit::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 CMyIpAddrEdit::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 CMyIpAddrEdit::setStyleSheet(const QString &styleSheet){ip_part1_->setStyleSheet(styleSheet);ip_part2_->setStyleSheet(styleSheet);ip_part3_->setStyleSheet(styleSheet);ip_part4_->setStyleSheet(styleSheet);}void CMyIpAddrEdit::onKeyPressLeftOrRight(int nkeyType,int nNewLineEditType){switch(nNewLineEditType){case 0:ip_part1_->setEditCursorPosition(nkeyType);break;case 1:ip_part2_->setEditCursorPosition(nkeyType);break;case 2:ip_part3_->setEditCursorPosition(nkeyType);break;case 3:ip_part4_->setEditCursorPosition(nkeyType);break;}}void CMyIpAddrEdit::setEnabled(bool bEnable){ip_part1_->setEnabled(bEnable);ip_part2_->setEnabled(bEnable);ip_part3_->setEnabled(bEnable);ip_part4_->setEnabled(bEnable);labeldot1_->setEnabled(bEnable);labeldot2_->setEnabled(bEnable);labeldot3_->setEnabled(bEnable);}void CMyIpAddrEdit::resizeEvent(QResizeEvent* event){int nWidth = width()/4;int nHeight = height();ip_part1_->setGeometry(QRect(0, 0, nWidth, nHeight));ip_part2_->setGeometry(QRect(nWidth, 0, nWidth, nHeight));ip_part3_->setGeometry(QRect(nWidth*2, 0, nWidth, nHeight));ip_part4_->setGeometry(QRect(nWidth*3, 0, width()-nWidth*3, nHeight));labeldot1_->setGeometry(QRect(nWidth-3, 1, 6, nHeight-2));labeldot2_->setGeometry(QRect(nWidth*2-3, 1, 6, nHeight-2));labeldot3_->setGeometry(QRect(nWidth*3-3, 1, 6, nHeight-2));}
阅读全文
1 0
- QT 实现自定义的IP地址控件
- Qt实现的IP地址输入控件
- PyQt4实现封装的QT的ip地址控件
- 用PyQt实现封装QT的IP地址控件
- qt IP控件的实现
- Qt版IP地址控件
- QT:IP地址输入框的实现
- 基于C++ Builder的自定义IP地址控件
- VB.NET 输入IP地址的自定义用户控件(上)
- VB.NET 输入IP地址的自定义用户控件
- C#实现IP地址控件
- QT 自定义IP地址输入框
- miniGUI1.6 IP控件自定义 续篇,解决了只能保存一个IP地址的问题
- IP地址控件的使用
- [Qt] IP地址输入框实现
- C# 学习自定义控件 再做一个ip地址控件(经过测试的)
- IP控件获取IP地址的方法
- QT自定义控件之圆形头像的实现
- 创建对象的七种方式
- 对ffmpeg的时间戳的理解笔记
- 2017 Multi-University Training Contest
- 计算机网络基础知识
- Tensorflow 如何使用自己cifar10训练模型检测一张任意的图片
- QT 实现自定义的IP地址控件
- Lumen 有问题? 填坑吧
- Vue中Class与Style绑定
- Android四大组件之Activity
- 网狐6.6完整商业版源码架设最新棋牌游戏源码下载
- 推荐系统
- js模拟手机短信对话
- java 用单链表实现队列
- Maven