IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 基于qt平台的ip地址输入控件 -> 正文阅读

[网络协议]基于qt平台的ip地址输入控件

说明

qt编写的ip地址输入控件,功能齐全,非常实用,使用提升法集成到自己项目的ui中即可。提供设置ip和获取ip两个接口。具体看代码,比较简单,注释应该比较详细了,下载地址放在文章尾部。
在这里插入图片描述

代码

ipinputcontrol.h

#ifndef IPINPUTCONTROL_H
#define IPINPUTCONTROL_H

#include <QWidget>
#include <QKeyEvent>
#include <QRegExpValidator>

QT_BEGIN_NAMESPACE
namespace Ui { class ipInputControl; }
QT_END_NAMESPACE

class ipInputControl : public QWidget
{
    Q_OBJECT

public:
    ipInputControl(QWidget *parent = nullptr);
    ~ipInputControl();
signals:
    void warningIP(const QString&);
public slots:
    QString getIP() const;
    void setIP(const QString&);
private:
    void keyPressEvent(QKeyEvent*);
    bool eventFilter(QObject*, QEvent*);
    void checkInput(const QString&);
private:
    Ui::ipInputControl *ui;
};
#endif // IPINPUTCONTROL_H

ipinputcontrol.cpp

#include "ipinputcontrol.h"
#include "ui_ipinputcontrol.h"
#include <QDebug>
#define outlog qDebug()
ipInputControl::ipInputControl(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::ipInputControl)
{
    ui->setupUi(this);

    //设置IP地址校验,禁止输入非法字符
    QRegExp regExp("(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2})");
    QRegExpValidator *validator = new QRegExpValidator(regExp, this);
    ui->lineEdit->setValidator(validator);
    ui->lineEdit_2->setValidator(validator);
    ui->lineEdit_3->setValidator(validator);
    ui->lineEdit_4->setValidator(validator);

    //设置Tab键按下时的切换顺序
    QWidget::setTabOrder(ui->lineEdit, ui->lineEdit_2);
    QWidget::setTabOrder(ui->lineEdit_2, ui->lineEdit_3);
    QWidget::setTabOrder(ui->lineEdit_3, ui->lineEdit_4);
    QWidget::setTabOrder(ui->lineEdit_4, ui->lineEdit);

    //在窗体上为lineEdit安装事件过滤器
    ui->lineEdit->installEventFilter(this);
    ui->lineEdit_2->installEventFilter(this);
    ui->lineEdit_3->installEventFilter(this);
    ui->lineEdit_4->installEventFilter(this);

    //输入时做检查
    connect(ui->lineEdit, &QLineEdit::textChanged, this, &ipInputControl::checkInput);
    connect(ui->lineEdit_2, &QLineEdit::textChanged, this, &ipInputControl::checkInput);
    connect(ui->lineEdit_3, &QLineEdit::textChanged, this, &ipInputControl::checkInput);
    connect(ui->lineEdit_4, &QLineEdit::textChanged, this, &ipInputControl::checkInput);
}

ipInputControl::~ipInputControl()
{
    delete ui;
}

//检查ip地址输入,若输入超过2位或2位数值大于25时,发送事件自动切换到下一个输入口
void ipInputControl::checkInput(const QString& text)
{
    if(ui->lineEdit_4->hasFocus())
    {
        return ;
    }
    if(text.length() > 2)
    {
        QKeyEvent myEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
        qApp->sendEvent(this, &myEvent);
    }
    else if(text.length() == 2)
    {
        int temp = text.toInt();
        if(temp > 25)
        {
            QKeyEvent myEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
            qApp->sendEvent(this, &myEvent);
        }
    }
}
//回车键可以对输入做检查
void ipInputControl::keyPressEvent(QKeyEvent* e)
{
    if(e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return)
    {
        QString ipSub1 = ui->lineEdit->text();
        QString ipSub2 = ui->lineEdit_2->text();
        QString ipSub3 = ui->lineEdit_3->text();
        QString ipSub4 = ui->lineEdit_4->text();
        if(ipSub1.isEmpty() || ipSub2.isEmpty() || ipSub3.isEmpty() || ipSub4.isEmpty())
        {
            emit warningIP("ip address input error.");
            outlog<<"ip address input is error.";
        }
        else
        {
            QString ipString = ipSub1 + "." + ipSub2 + "." + ipSub3 + "." + ipSub4;
            outlog << "ipString: " << ipString;
        }
    }
}
bool ipInputControl::eventFilter(QObject *watched, QEvent *event)
{
    if (event->type() == QEvent::KeyPress)
    {
        QLineEdit *txt = (QLineEdit *)watched;
        if (txt == ui->lineEdit || txt == ui->lineEdit_2 || txt == ui->lineEdit_3 || txt == ui->lineEdit_4)
        {
            QKeyEvent *key = (QKeyEvent *)event;

            //如果当前按下了小数点则移动焦点到下一个输入框
            if (key->text() == ".")
            {
                if(ui->lineEdit->hasFocus())
                    ui->lineEdit_2->setFocus();
                else if(ui->lineEdit_2->hasFocus())
                    ui->lineEdit_3->setFocus();
                else if(ui->lineEdit_3->hasFocus())
                    ui->lineEdit_4->setFocus();
                else if(ui->lineEdit_4->hasFocus())
                    ui->lineEdit->setFocus();
            }

            //如果按下了退格键并且当前文本框已经没有了内容则焦点往前移
            if (key->key() == Qt::Key_Backspace)
            {
                if (txt->text().length() <= 1)
                {
                    if(ui->lineEdit_2->hasFocus())
                        ui->lineEdit->setFocus();
                    else if(ui->lineEdit_3->hasFocus())
                        ui->lineEdit_2->setFocus();
                    else if(ui->lineEdit_4->hasFocus())
                        ui->lineEdit_3->setFocus();
                }
            }
        }
    }
    return QWidget::eventFilter(watched, event);
}
//返回ip地址字符串,用于获取
QString ipInputControl::getIP() const
{
    QString ipSub1 = ui->lineEdit->text();
    QString ipSub2 = ui->lineEdit_2->text();
    QString ipSub3 = ui->lineEdit_3->text();
    QString ipSub4 = ui->lineEdit_4->text();
    if(ipSub1.isEmpty() || ipSub2.isEmpty() || ipSub3.isEmpty() || ipSub4.isEmpty())
    {
        return "";
    }
    return ipSub1 + "." + ipSub2 + "." + ipSub3 + "." + ipSub4;;
}
//从ip地址字符串设置到ui
void ipInputControl::setIP(const QString& text)
{
    QStringList ipList = text.split(".");
    if(ipList.size() != 4)
    {
        emit warningIP("ip address format is error.");
        outlog<<"ip address format is error.";
        return;
    }
    ui->lineEdit->setText(ipList.at(0));
    ui->lineEdit_2->setText(ipList.at(1));
    ui->lineEdit_3->setText(ipList.at(2));
    ui->lineEdit_4->setText(ipList.at(3));
}

下载地址

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:56:03  更:2022-03-08 22:56:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:23:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码