QT中封装的IP地址的widgetC.docx
《QT中封装的IP地址的widgetC.docx》由会员分享,可在线阅读,更多相关《QT中封装的IP地址的widgetC.docx(8页珍藏版)》请在冰豆网上搜索。
QT中封装的IP地址的widgetC
QT中封装的IP地址的widget(C++)
QT没有提供一个完整的IP地址控件,1.可以使用QLineEdit简单的实现
QRegExpregExp("((2[0-4]\\d|25[0-5]|[01]?
\\d\\d?
)\\.){3}(2[0-4]\\d|25[0-5]|[01]?
\\d\\d?
)");
QRegExpValidator*pValidator=newQRegExpValidator(regExp,this);
QLineEdit*lineEdit=newQLineEdit(this);
lineEdit->setValidator(newQRegExpValidator(pValidator,this));
lineEdit->setInputMask("000.000.000.000;");但是上面的输入时没有window的IP地址控件好用。
所以自己就用4个QLineEdit封装了一个,用起来好多了,
下面是代码:
//MyIpPartLineEdit.h
#pragmaonce#include<QLineEdit>classQWidget;
classQFocusEvent;
classQKeyEvent;classMyIpPartLineEdit:
publicQLineEdit
{
Q_OBJECT
public:
MyIpPartLineEdit(QWidget*parent=0);
~MyIpPartLineEdit(void);voidset_nexttab_edit(QLineEdit*nexttab){next_tab_=nexttab;}protected:
virtualvoidfocusInEvent(QFocusEvent*e);
virtualvoidkeyPressEvent(QKeyEvent*event);privateslots:
voidtext_edited(constQString&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=newQIntValidator(0,255,this);
this->setValidator(validator);connect(this,SIGNAL(textEdited(constQString&)),this,SLOT(text_edited(constQString&)));
}MyIpPartLineEdit:
:
~MyIpPartLineEdit(void)
{
}voidMyIpPartLineEdit:
:
focusInEvent(QFocusEvent*e)
{
this->selectAll();
QLineEdit:
:
focusInEvent(e);
}voidMyIpPartLineEdit:
:
keyPressEvent(QKeyEvent*event)
{
if(event->key()==Qt:
:
Key_Period)
{
if(next_tab_)
{
next_tab_->setFocus();
next_tab_->selectAll();
}
}
QLineEdit:
:
keyPressEvent(event);
}voidMyIpPartLineEdit:
:
text_edited(constQString&text)
{
QIntValidatorv(0,255,this);
QStringipaddr=text;
intpos=0;
QValidator:
:
Statestate=v.validate(ipaddr,pos);
if(state==QValidator:
:
Acceptable)
{
if(ipaddr.size()>1)
{
if(ipaddr.size()==2)
{
intipnum=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
#pragmaonce#include<QWidget>classQLineEdit;
classQLabel;
classMyIpPartLineEdit;classMyIpAddrEdit:
publicQWidget
{
Q_OBJECT
public:
MyIpAddrEdit(QWidget*pParent=0);
~MyIpAddrEdit();voidsettext(constQString&text);
QStringtext();
voidsetStyleSheet(constQString&styleSheet);signals:
voidtextchanged(constQString&text);
voidtextedited(constQString&text);privateslots:
voidtextchangedslot(constQString&text);
voidtexteditedslot(constQString&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_=newMyIpPartLineEdit(this);
ip_part2_=newMyIpPartLineEdit(this);
ip_part3_=newMyIpPartLineEdit(this);
ip_part4_=newMyIpPartLineEdit(this);labeldot1_=newQLabel(this);
labeldot2_=newQLabel(this);
labeldot3_=newQLabel(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(constQString&)),this,SLOT(textchangedslot(constQString&)));
connect(ip_part2_,SIGNAL(textChanged(constQString&)),this,SLOT(textchangedslot(constQString&)));
connect(ip_part3_,SIGNAL(textChanged(constQString&)),this,SLOT(textchangedslot(constQString&)));
connect(ip_part4_,SIGNAL(textChanged(constQString&)),this,SLOT(textchangedslot(constQString&)));connect(ip_part1_,SIGNAL(textEdited(constQString&)),this,SLOT(texteditedslot(constQString&)));
connect(ip_part2_,SIGNAL(textEdited(constQString&)),this,SLOT(texteditedslot(constQString&)));
connect(ip_part3_,SIGNAL(textEdited(constQString&)),this,SLOT(texteditedslot(constQString&)));
connect(ip_part4_,SIGNAL(textEdited(constQString&)),this,SLOT(texteditedslot(constQString&)));
}MyIpAddrEdit:
:
~MyIpAddrEdit()
{}voidMyIpAddrEdit:
:
textchangedslot(constQString&/*text*/)
{
QStringippart1,ippart2,ippart3,ippart4;
ippart1=ip_part1_->text();
ippart2=ip_part2_->text();
ippart3=ip_part3_->text();
ippart4=ip_part4_->text();QStringipaddr=QString("%1.%2.%3.%4")
.arg(ippart1)
.arg(ippart2)
.arg(ippart3)
.arg(ippart4);emittextchanged(ipaddr);
}voidMyIpAddrEdit:
:
texteditedslot(constQString&/*text*/)
{
QStringippart1,ippart2,ippart3,ippart4;
ippart1=ip_part1_->text();
ippart2=ip_part2_->text();
ippart3=ip_part3_->text();
ippart4=ip_part4_->text();QStringipaddr=QString("%1.%2.%3.%4")
.arg(ippart1)
.arg(ippart2)
.arg(ippart3)
.arg(ippart4);emittextedited(ipaddr);
}voidMyIpAddrEdit:
:
settext(constQString&text)
{
QStringippart1,ippart2,ippart3,ippart4;
QStringqstring_validate=text;//IP地址验证
QRegExpregexp("((2[0-4]\\d|25[0-5]|[01]?
\\d\\d?
)\\.){3}(2[0-4]\\d|25[0-5]|[01]?
\\d\\d?
)");
QRegExpValidatorregexp_validator(regexp,this);
intnPos=0;
QValidator:
:
Statestate=regexp_validator.validate(qstring_validate,nPos);
//IP合法
if(state==QValidator:
:
Acceptable)
{
QStringListippartlist=text.split(".");
intstrcount=ippartlist.size();
intindex=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);
}QStringMyIpAddrEdit:
:
text()
{
QStringippart1,ippart2,ippart3,ippart4;
ippart1=ip_part1_->text();
ippart2=ip_part2_->text();
ippart3=ip_part3_->text();
ippart4=ip_part4_->text();returnQString("%1.%2.%3.%4")
.arg(ippart1)
.arg(ippart2)
.arg(ippart3)
.arg(ippart4);
}voidMyIpAddrEdit:
:
setStyleSheet(constQString&styleSheet)
{
ip_part1_->setStyleSheet(styleSheet);
ip_part2_->setStyleSheet(styleSheet);
ip_part3_->setStyleSheet(styleSheet);
ip_part4_->setStyleSheet(styleSheet);
}
下面是调用方法
#include<QApplication>
#include<QDialog>
#include"MyIpAddrEdit.h"intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);QDialog*my_dialog=newQDialog;
MyIpAddrEdit*ipAddr=newMyIpAddrEdit(my_dialog);
ipAddr->settext("127.0.0.1");
my_dialog->show();returnapp.exec();
}