用QT实现的用于显示输入IP的LineEdit控件
2011-11-30 16:46
696 查看
QT下没有可以直接用于输入IP这种字符串的控件,自己写了一个。 可以实现根据用户设置的控件大小画出正确的外观,验证输入数字在正确范围内,提供了简单的代码设置获取IP的接口。 尚缺少连续输入和删除功能。 废话少说,贴代码优先,详见注释~ //.h file #ifndef IPLINEEDIT_H #define IPLINEEDIT_H #include <QLineEdit> class COneIPLineEdit : public QLineEdit { Q_OBJECT public: COneIPLineEdit(QWidget *parent); ~COneIPLineEdit(); //signals: // void SignalFinished(); // //public slots: // void SlotPreFinished(); // //private: // void SlotTextChanged(); }; /*********************************************************************************/ class CIPLineEdit : public QLineEdit { Q_OBJECT public: CIPLineEdit(QWidget *parent); ~CIPLineEdit(); void setGeometry(int x, int y, int w, int h); bool SetIPText(int nIP, int nIndex); int GetIPText(int nIndex); private: void paintEvent(QPaintEvent *e); private: COneIPLineEdit *m_pLineEdit[4]; }; #endif // IPLINEEDIT_H //.cpp file #include "IPLineEdit.h" #include <QPainter> #include <QPen> #include <QRegExp> #include <QValidator> COneIPLineEdit::COneIPLineEdit( QWidget *parent ) :QLineEdit(parent) { setAlignment(Qt::AlignHCenter); setMaxLength(3); setMinimumSize(25, 20); QRegExp rx("(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2})"); setValidator(new QRegExpValidator(rx, this)); connect(this, SIGNAL(textChanged(QString)), this, SLOT(SlotTextChanged())); } COneIPLineEdit::~COneIPLineEdit() { } //void COneIPLineEdit::SlotPreFinished() //{ // //} // //void COneIPLineEdit::SlotTextChanged() //{ // if (text().length() == 3) // { // // } //} /*******************************************************************************************/ CIPLineEdit::CIPLineEdit(QWidget *parent) : QLineEdit(parent) { } CIPLineEdit::~CIPLineEdit() { } void CIPLineEdit::paintEvent( QPaintEvent *e ) { QLineEdit::paintEvent(e); int nWidth = width() - 5;//3个点,两头边框各一个像素 int nAverageWidth = nWidth / 4; int nPointY = height() / 2; int nTrans = 0; //若除以4且算上点、框宽度之后仍有2或3的空余,则左边框留两个像素显示 if (nWidth - nAverageWidth * 4 - 5 >= 2) { nTrans = 1; } QPainter painter(this); painter.setPen(QPen(Qt::black)); painter.save(); for (int i = 0; i < 3; i++) { painter.drawPoint(nAverageWidth*(i+1) + i+1 + nTrans, nPointY); } painter.restore(); } void CIPLineEdit::setGeometry( int x, int y, int w, int h ) { QLineEdit::setGeometry(x, y, w, h); int nWidth = w - 5;//3个点,两头边框各一个像素 int nAverageWidth = nWidth / 4; int nAverageHeight = h - 2; int nTrans = 0; //若除以4且算上点、框宽度之后仍有2或3的空余,则左边框留两个像素显示 if (nWidth - nAverageWidth * 4 - 5 >= 2) { nTrans = 1; } for (int i = 0; i < 4; i++) { m_pLineEdit[i] = new COneIPLineEdit(this); m_pLineEdit[i]->setFrame(false); m_pLineEdit[i]->setGeometry(nAverageWidth*i+ i + 1, 1, nAverageWidth, nAverageHeight); } } bool CIPLineEdit::SetIPText( int nIP, int nIndex ) { if (nIndex < 0 || nIndex > 3) { return false; } m_pLineEdit[nIndex]->setText(QString(nIP)); return true; } int CIPLineEdit::GetIPText( int nIndex ) { if (nIndex < 0 || nIndex > 3) { return -1; } return m_pLineEdit[nIndex]->text().toInt(); } //main file #include <QtGui/QApplication> #include <QMainWindow> #include "IPLineEdit.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow mainwindow; mainwindow.setFixedSize(300, 200); CIPLineEdit *pIPLineEdit = new CIPLineEdit(&mainwindow); pIPLineEdit->setGeometry(50, 50, 120, 26); mainwindow.show(); a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit())); return a.exec(); }
相关文章推荐
- 用QT实现的用于显示输入IP的LineEdit控件
- Qt---实现在QLineEdit中输入密码时先显示明文,然后显示*号
- Qt实现的IP地址输入控件
- Qt 控件 实现 QComboBox输入自动提示功能(仿Google搜索提示)
- 【QT】:QT如何实现LineEdit控件和textlabel控件的绑定
- ASP.NET标准控件之用于文本输入和显示的标准控件
- QT画图教程1:实现给label上面显示图并且让图自适应控件大小
- Qt实现十六进制接收文本和显示文本(可用于串口的十六进制)
- qt IP控件的实现
- 一个用于方便输入和检测IP小控件
- qt利用委托:QStyledItemDelegate,实现tableview 的表格项的自定义显示,如插入图片,绘制控件
- Fedora14 基于Qt的UDP传输文字聊天小软件实现 (Qt查询本地Ip、Qt本地时间显示、传输中文汉字实现、Qt的textedit自动滚屏实现、给QPushButton设键盘快捷实现)---续上
- 输入法的字符输入------InputConnection桥梁实现字符从输入法的字符输入到view显示
- Qt QWidget控件透明动画实现
- ASP.NET中服务器控件Button调用javascript代码运用正则表达式验证TextBox中输入的是否为正整数或正小数,符合要求则继续运行服务器端代码功能的实现
- js控制文本框输入的内容为(数字、字母、汉字)(一、js在控件中实现)
- 受限IP调用webservice方案 webservice远程测试显示 “测试窗体只能用于来自本地计算机的请求” webservice注释
- Qt下结合vtk控件显示深度图像
- JSP内置对象:在同一个页面实现成绩输入及总成绩显示
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示