qt 程序間切換焦點 Qt編寫自定義IP位址控制項

2021-10-14 05:30:35 字數 3344 閱讀 9554

在日常開發過程中,qt給我們提供的基礎控制項往往滿足不了一些複雜的開發專案,許多精巧的小控制項是需要我們自己去基於一些原生控制項去自定義編寫的,這也是qt開發中的一項重要技能。比如我們在開發網路程式的過程中,需要經常性的輸入源位址和目標位址的ip,而qt designer並未給我們提供ip位址輸入控制項(印象中mfc中有此控制項),此時就需要我們自己去自定義編寫,經過本人的研究,在此貢獻一套自己編寫好的控制項**:

myippartlineedit.h

#pragma once

#include class qwidget;

class qfocusevent;

class qkeyevent;

class myippartlineedit : public qlineedit

void set_nexttab_edit(qlineedit *currenttab, qlineedit *nexttab)

//void

protected:

virtual void focusinevent(qfocusevent *e);

virtual void keypressevent(qkeyevent *event);

private slots:

void text_edited(const qstring& text);

private:

qlineedit *current_tab_, *prev_tab_, *next_tab_;

};

myippartlineedit.cpp

#include "myippartlineedit.h"  

#include #include myippartlineedit::myippartlineedit(qwidget *parent/* = 0*/)

: qlineedit(parent)

myippartlineedit::~myippartlineedit(void)

void myippartlineedit::focusinevent(qfocusevent *e)

void myippartlineedit::keypressevent(qkeyevent *event)

}else if (event->key() == qt::key_backspace)

}qlineedit::keypressevent(event);}

void myippartlineedit::text_edited(const qstring& text)}}

else}}

}}

myipaddredit.h

#include class qlineedit;

class qlabel;

class myippartlineedit;

class myipaddredit : public qwidget

;

myipaddredit.cpp

#include "myipaddredit.h"   

#include #include #include "myippartlineedit.h"

#include "**sondocument.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]?dd?)");

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::getip(qstring& ip1, qstring& ip2, qstring& ip3, qstring& ip4)

void myipaddredit::setstylesheet(const qstring &stylesheet)

在工程中新增上述c++檔案後,便可以使用,使用方法如下:

方法呼叫:

m_objipaddredit->settext(p_ip);     //設定ip位址(也可以手動輸入)

qstring p_ip = m_objipaddredit->text(); //獲取ip位址

qstring p_ip1, p_ip2, p_ip3, p_ip4, p_ip;

m_objipaddredit->getip(p_ip1, p_ip2, p_ip3, p_ip4); //獲取ip位址的四個部分

//判斷ip輸入是否合法

if (p_ip1 == null || p_ip2 == null || p_ip3 == null || p_ip4 == null)

}}

執行效果:

qt(c++ 開發框架)

qt 程序間通訊

qt中仍可以利用傳統的程序間通訊方式 共享記憶體.在桌面環境中,在傳統的程序間通訊方式的基礎上發展了更為方便的物件導向的通訊方式 kde環境 dcop gnome環境 bonobo dbus freedesktop開源專案的linux ipc通訊機制,kde和gnome環境都能支援 qt embed...

qt 程序間通訊

qt中仍可以利用傳統的程序間通訊方式 共享記憶體.在桌面環境中,在傳統的程序間通訊方式的基礎上發展了更為方便的物件導向的通訊方式 kde環境 dcop gnome環境 bonobo dbus freedesktop開源專案的linux ipc通訊機制,kde和gnome環境都能支援 qt embed...

Qt程序間通訊

程序間通訊,就是在不同程序之間傳播或交換資訊。管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 named pipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semophor...