[Qt] IP地址输入框实现
来源:互联网 发布:身份证号归属地数据库 编辑:程序博客网 时间:2024/05/22 05:14
封装了一个ip地址的输入框。网络上下载了份代码,找不到哪里的了。经过修改之后,尽力让它的行为和windows的IP地址输入框的行为看起来像些。代码如下:
//ipaddredit.h
#ifndef IPADDREDIT_H#define IPADDREDIT_H#include <QWidget>class QLineEdit;class QLabel;class CIpPartLineEdit;class CIpAddrEdit : public QWidget{ Q_OBJECTpublic: CIpAddrEdit(QWidget *parent = 0); ~CIpAddrEdit(); void m_vSetText(const QString &text); QString m_strGetText(); void m_vSetStyleSheet(const QString &styleSheet);signals: void sigTextChanged(const QString &text); void sigTextEdited(const QString &text);private slots: void slot_text_Changed(const QString &text); void slot_text_Edited(const QString &text);private: CIpPartLineEdit * m_pIpPart1; CIpPartLineEdit * m_pIpPart2; CIpPartLineEdit * m_pIpPart3; CIpPartLineEdit * m_pIpPart4; QLabel * m_pDot1; QLabel * m_pDot2; QLabel * m_pDot3;};#endif // IPADDREDIT_H
//ipaddredit.cpp
#include <QRegExpValidator>#include <QLabel>#include "ippartlineedit.h"#include "ipaddredit.h"CIpAddrEdit::CIpAddrEdit(QWidget *parent) : QWidget(parent){ m_pIpPart1 = new CIpPartLineEdit(this); m_pIpPart2 = new CIpPartLineEdit(this); m_pIpPart3 = new CIpPartLineEdit(this); m_pIpPart4 = new CIpPartLineEdit(this); m_pDot1 = new QLabel(this); m_pDot2 = new QLabel(this); m_pDot3 = new QLabel(this); m_pIpPart1->setGeometry(QRect(0, 0, 42, 27)); m_pIpPart2->setGeometry(QRect(70, 0, 42, 27)); m_pIpPart3->setGeometry(QRect(140, 0, 42, 27)); m_pIpPart4->setGeometry(QRect(210, 0, 42, 27)); m_pDot1->setText("-"); m_pDot1->setGeometry(QRect(48, 5, 16, 16)); m_pDot1->setAlignment(Qt::AlignCenter); m_pDot2->setText("-"); m_pDot2->setGeometry(QRect(118, 5, 16, 16)); m_pDot2->setAlignment(Qt::AlignCenter); m_pDot3->setText("-"); m_pDot3->setGeometry(QRect(188, 5, 16, 16)); m_pDot3->setAlignment(Qt::AlignCenter); QWidget::setTabOrder(m_pIpPart1, m_pIpPart2); QWidget::setTabOrder(m_pIpPart2, m_pIpPart3); QWidget::setTabOrder(m_pIpPart3, m_pIpPart4); m_pIpPart1->m_vSetNextEdit(m_pIpPart2); m_pIpPart2->m_vSetNextEdit(m_pIpPart3); m_pIpPart3->m_vSetNextEdit(m_pIpPart4); m_pIpPart2->m_vSetPreEdit(m_pIpPart1); m_pIpPart3->m_vSetPreEdit(m_pIpPart2); m_pIpPart4->m_vSetPreEdit(m_pIpPart3); connect(m_pIpPart1, SIGNAL(textChanged(const QString&)), this, SLOT(slot_text_Changed(const QString&))); connect(m_pIpPart2, SIGNAL(textChanged(const QString&)), this, SLOT(slot_text_Changed(const QString&))); connect(m_pIpPart3, SIGNAL(textChanged(const QString&)), this, SLOT(slot_text_Changed(const QString&))); connect(m_pIpPart4, SIGNAL(textChanged(const QString&)), this, SLOT(slot_text_Changed(const QString&))); connect(m_pIpPart1, SIGNAL(textEdited(const QString&)), this, SLOT(slot_text_Edited(const QString&))); connect(m_pIpPart2, SIGNAL(textEdited(const QString&)), this, SLOT(slot_text_Edited(const QString&))); connect(m_pIpPart3, SIGNAL(textEdited(const QString&)), this, SLOT(slot_text_Edited(const QString&))); connect(m_pIpPart4, SIGNAL(textEdited(const QString&)), this, SLOT(slot_text_Edited(const QString&)));}CIpAddrEdit::~CIpAddrEdit(){}void CIpAddrEdit::slot_text_Changed(const QString &/*text*/){ QString strIpPart1 = m_pIpPart1->text(); QString strIpPart2 = m_pIpPart1->text(); QString strIpPart3 = m_pIpPart1->text(); QString strIpPart4 = m_pIpPart1->text(); QString strIpAddr = QString("%1.%2.%3.%4") .arg(strIpPart1) .arg(strIpPart2) .arg(strIpPart3) .arg(strIpPart4); emit sigTextChanged(strIpAddr);}void CIpAddrEdit::slot_text_Edited(const QString &/*text*/){ QString strIpPart1 = m_pIpPart1->text(); QString strIpPart2 = m_pIpPart1->text(); QString strIpPart3 = m_pIpPart1->text(); QString strIpPart4 = m_pIpPart1->text(); QString strIpAddr = QString("%1.%2.%3.%4") .arg(strIpPart1) .arg(strIpPart2) .arg(strIpPart3) .arg(strIpPart4); emit sigTextEdited(strIpAddr);}void CIpAddrEdit::m_vSetText(const QString &text){ QString strIpAddr = text; 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 iPos = 0; QValidator::State state = regexp_validator.validate(strIpAddr, iPos); if(state != QValidator::Acceptable) { return ; } QStringList ipAddrList = text.split("."); //int iCount = ipAddrList.size(); QString strIpPart1 = ipAddrList.at(0); QString strIpPart2 = ipAddrList.at(1); QString strIpPart3 = ipAddrList.at(2); QString strIpPart4 = ipAddrList.at(3); m_pIpPart1->setText(strIpPart1); m_pIpPart2->setText(strIpPart2); m_pIpPart3->setText(strIpPart3); m_pIpPart4->setText(strIpPart4);}QString CIpAddrEdit::m_strGetText(){ QString strIpPart1 = m_pIpPart1->text(); QString strIpPart2 = m_pIpPart2->text(); QString strIpPart3 = m_pIpPart3->text(); QString strIpPart4 = m_pIpPart4->text(); return QString("%1.%2.%3.%4") .arg(strIpPart1) .arg(strIpPart2) .arg(strIpPart3) .arg(strIpPart4);}void CIpAddrEdit::m_vSetStyleSheet(const QString &styleSheet){ m_pIpPart1->setStyleSheet(styleSheet); m_pIpPart2->setStyleSheet(styleSheet); m_pIpPart3->setStyleSheet(styleSheet); m_pIpPart4->setStyleSheet(styleSheet);}
//ippartlineedit.h
#ifndef IPPARTLINEEDIT_H#define IPPARTLINEEDIT_H#include <QLineEdit>class QWidget;class QFocusEvent;class QKeyEvent;class CIpPartLineEdit : public QLineEdit{ Q_OBJECTpublic: CIpPartLineEdit(QWidget *parent = 0); ~CIpPartLineEdit(); void m_vSetPreEdit(QLineEdit *preEdit); void m_vSetNextEdit(QLineEdit *nextEdit);protected: void focusInEvent(QFocusEvent *event); void keyPressEvent(QKeyEvent *event);private slots: void slot_text_Edited(const QString & text);private: QLineEdit *m_preEdit; QLineEdit *m_nextEdit;};#endif // IPPARTLINEEDIT_H
//ippartlineedit.cpp
#include <QIntValidator>#include <QKeyEvent>#include "ippartlineedit.h"CIpPartLineEdit::CIpPartLineEdit(QWidget *parent) : QLineEdit(parent){ m_preEdit = NULL; m_nextEdit = 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(slot_text_Edited(const QString&)));}CIpPartLineEdit::~CIpPartLineEdit(){}void CIpPartLineEdit::m_vSetPreEdit(QLineEdit *preEdit){ m_preEdit = preEdit;}void CIpPartLineEdit::m_vSetNextEdit(QLineEdit *nextEdit){ m_nextEdit = nextEdit;}void CIpPartLineEdit::focusInEvent(QFocusEvent *event){ this->selectAll(); QLineEdit::focusInEvent(event);}void CIpPartLineEdit::keyPressEvent(QKeyEvent *event){ if(event->key() == Qt::Key_Period) { if(m_nextEdit && (this->text().size()!=0) && (!this->hasSelectedText())) { m_nextEdit->setFocus(); m_nextEdit->selectAll(); } } if(event->key() == Qt::Key_Backspace) { if(m_preEdit && (this->text().size() == 0)) { m_preEdit->setFocus(); m_preEdit->setCursorPosition( m_preEdit->text().size() ); } } QLineEdit::keyPressEvent(event);}void CIpPartLineEdit::slot_text_Edited(const QString & text){ QIntValidator v(0, 255, this); QString ipAddr = text; int iPos = 0; QValidator::State state = v.validate(ipAddr, iPos); if(state != QValidator::Acceptable) { return ; } if(ipAddr.size() <= 1) { return ; } if(ipAddr.size() == 2) { int iIpNum = ipAddr.toInt(); if(iIpNum > 25) { if(m_nextEdit) { m_nextEdit->setFocus(); m_nextEdit->selectAll(); } } } else { if(m_nextEdit) { m_nextEdit->setFocus(); m_nextEdit->selectAll(); } }}
0 0
- QT:IP地址输入框的实现
- [Qt] IP地址输入框实现
- Qt实现的IP地址输入控件
- 实现IP地址输入框
- QT 自定义IP地址输入框
- Qt实现IP输入框
- Qt实现IP输入框
- Qt编程3--IP地址、MAC地址输入框
- IP地址输入框
- IP地址输入框
- C#实现的IP地址输入框类 kewords: IP地址框 C# .Net
- IP地址输入框制作
- 只能输入IP地址的输入框
- QT 实现自定义的IP地址控件
- 通过arp实现输入ip地址输出mac地址
- JavaScript写的IP 地址输入框
- VC 制作IP地址输入框
- 用MaskedTextBox制作 IP地址输入框
- 判断进程是否以管理员权限运行
- filter 配置文件如何过滤多个文件
- 管道和FIFO
- [Ruby]ruby笔记01
- 链表小思
- [Qt] IP地址输入框实现
- Android ViewPager从网络获取图片实现无限轮播
- intellij idea 插件备忘
- 竖直滚动 jquery 文字 图片
- java多线程之生产者消费者经典问题
- How to Take Ownership of a File/Folder Using Command-Line in Windows 7 or newer version System
- HDU 5480 杂题
- Linux Signal实现代码分析http://blog.csdn.net/suqin0802/article/details/8093004
- BestCoder Round #57 (div.2)1002