QT中封裝的IP位址的widget

2021-09-06 03:44:04 字數 3751 閱讀 5344

qt沒有提供乙個完整的ip位址控制項,

1. 可以使用qlineedit簡單的實現

qregexp regexp(

"((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.)(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)

");

qregexpvalidator

*pvalidator

=new

qregexpvalidator(regexp,

this

); qlineedit

*lineedit

=new

qlineedit(

this

); lineedit

->

setvalidator(

newqregexpvalidator(pvalidator,

this

));

lineedit

->

setinputmask(

"000.000.000.000;");

但是上面的輸入時沒有window的ip位址控制項好用。所以自己就用4個qlineedit封裝了乙個,用起來好多了,

下面是**: //

myippartlineedit.h

#pragma once

#include

<

qlineedit

>

class

qwidget;

class

qfocusevent;

class

qkeyevent;

class

myippartlineedit :

public

qlineedit

protected

: virtual

void

focusinevent(qfocusevent

*e);

virtual

void

keypressevent(qkeyevent

*event

);  

private

slots:

void

text_edited(

const

qstring

&text);

private

: qlineedit

*next_tab_;

};

#include

"myippartlineedit.h

"#include

<

qintvalidator

>

#include

<

qkeyevent

>

myippartlineedit::myippartlineedit(qwidget

*parent

/*= 0

*/)

: qlineedit(parent)

myippartlineedit::

~myippartlineedit(

void)

void

myippartlineedit::focusinevent(qfocusevent

*e)

void

myippartlineedit::keypressevent(qkeyevent

*event)

} qlineedit::keypressevent(

event

); }

void

myippartlineedit::text_edited(

const

qstring

&text)

} }

else

} } } }

#pragma once

#include

<

qwidget

>

class

qlineedit;

class

qlabel;

class

myippartlineedit;

class

myipaddredit :

public

qwidget ;

//myipaddredit.cpp

#include

"myipaddredit.h

"#include

<

qregexpvalidator

>

#include

<

qlabel

>

#include

"myippartlineedit.h

"myipaddredit::myipaddredit(qwidget

*pparent

/*= 0

*/)

: qwidget(pparent)

myipaddredit::

~myipaddredit()

void

myipaddredit::textchangedslot(

const

qstring&/*

text

*/)

void

myipaddredit::texteditedslot(

const

qstring &/*

text

*/)

void

myipaddredit::settext(

const

qstring

&text)

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

(++index

<

strcount) if

(++index

<

strcount) if

(++index

<

strcount) }

ip_part1_

->

settext(ippart1);

ip_part2_

->

settext(ippart2);

ip_part3_

->

settext(ippart3);

ip_part4_

->

settext(ippart4);

} qstring myipaddredit::text()

void

myipaddredit::setstylesheet(

const

qstring

&stylesheet)

myipaddredit *ipaddr = new myipaddredit();

ipaddr->settext("127.0.0.1");

ipaddr->show();

c 中封裝的介紹

封裝就是將物件執行所需要的資源封裝在程式物件中,並給外界公布介面,這樣很複雜的邏輯經過包裝之後給其他類使用就很方便,其他類不需要關心你裡邊的功能是以哪種方式實現的,只要傳入需要的引數就可以得到想要的結果。例如 我們要看電視,只需要按一下開關和換台就可以了,有必要了解電視機內部的結構嘛?製造商為了我們...

Qt獲取本機的ip位址 MAC位址

qstring gethostipaddress 如果沒有找到,則以本地ip位址為ip if stripaddress.isempty stripaddress qhostaddress qhostaddress localhost tostring return stripaddress qstr...

物件導向中 封裝的理解

封裝是保證軟體部件具有優良的模組性的基礎,封裝的目標就是要實現軟體部件的 高內聚 低耦合 防止程式相互依賴性而帶來的變動影響。在物件導向的程式語言中,物件是封裝 的最基本單位,物件導向的封裝比傳統語言的封裝更為清晰 更為有力。物件導向的封裝就 是把描述乙個物件的屬性和行為的 封裝在乙個 模組 中,也...