1.定制自己的Ip QLineEdit控件类
2.将定制的QLineEdit布局在QFrame上
最后效果是这样子的
#pragma once
#include <QFrame>
#include <QString>
#include <QLabel>
#include <QLineEdit>
class IpPartLineEdit : public QLineEdit
{
Q_OBJECT
public:
IpPartLineEdit(QWidget *parent = 0);
~IpPartLineEdit(void);
void setNextTabEdit(QLineEdit *nexttab) { m_pNextLineEdit = nexttab; }
void setLastEdit(QLineEdit *lastEdit) { m_pLastEdit = lastEdit; }
signals:
void invalidInput(int);
// 提示信息信号
void showMessage(const QString &text);
protected:
virtual void focusInEvent(QFocusEvent *e);
virtual void keyPressEvent(QKeyEvent *event);
private slots:
void textEdited(const QString& text);
void editingFinished();
private:
QLineEdit *m_pNextLineEdit;
QLineEdit *m_pLastEdit;
};
class IpAddrLineEdit : public QFrame
{
Q_OBJECT
public:
explicit IpAddrLineEdit(QWidget* pParent = 0);
~IpAddrLineEdit() {}
void setIpText(const QString &text, const bool checkIpValidity = true);
QString getIpText(const bool autoFill = true);
void setUnitStyleSheet(const QString &styleSheet);
void setIpEnabled(bool bEnable);
signals:
//文本(IP)变化
void sigTextChanged(const QString& text);
//文本(IP)编辑
void SigTextEdited(const QString &text);
// 提示信息信号
void showMessageBox(const QString &text);
protected:
void enterEvent(QEvent * event);
void leaveEvent(QEvent * event);
private:
void initUI();
private slots:
void slotTextChanged(const QString& text);
void slotTextEdited(const QString &text);
private:
//IP字段
IpPartLineEdit *m_pIpPart1;
IpPartLineEdit *m_pIpPart2;
IpPartLineEdit *m_pIpPart3;
IpPartLineEdit *m_pIpPart4;
//逗号分隔符
QLabel *m_pLabelDot1;
QLabel *m_pLabelDot2;
QLabel *m_pLabelDot3;
};
//cpp实现
#include "test.h"
#include "qvalidator.h"
#include "qevent.h"
#include "qboxlayout.h"
#include "QApplication"
//IP控件实现
IpPartLineEdit::IpPartLineEdit(QWidget *parent /*= 0*/) :
QLineEdit(parent),
m_pNextLineEdit(nullptr),
m_pLastEdit(