QT中封装的IP地址的widgetC.docx

上传人:b****6 文档编号:4716089 上传时间:2022-12-07 格式:DOCX 页数:8 大小:15.83KB
下载 相关 举报
QT中封装的IP地址的widgetC.docx_第1页
第1页 / 共8页
QT中封装的IP地址的widgetC.docx_第2页
第2页 / 共8页
QT中封装的IP地址的widgetC.docx_第3页
第3页 / 共8页
QT中封装的IP地址的widgetC.docx_第4页
第4页 / 共8页
QT中封装的IP地址的widgetC.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

QT中封装的IP地址的widgetC.docx

《QT中封装的IP地址的widgetC.docx》由会员分享,可在线阅读,更多相关《QT中封装的IP地址的widgetC.docx(8页珍藏版)》请在冰豆网上搜索。

QT中封装的IP地址的widgetC.docx

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();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1