Qt实现定制化的输入框,如输入IP地址的小控件

这篇博客介绍了如何在Qt中创建一个定制化的输入框控件,用于输入IP地址。通过定义`IpPartLineEdit`和`IpAddrLineEdit`类,实现了IP地址的分段输入,并进行了输入合法性检查和焦点切换功能。每个部分的输入框限制为0-255的数字,使用`QIntValidator`进行校验,且支持键盘方向键进行焦点移动。
摘要由CSDN通过智能技术生成

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(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值