千家信息网

Qt如何实现IP地址输入控件

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,本篇内容介绍了"Qt如何实现IP地址输入控件"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言这
千家信息网最后更新 2025年12月04日Qt如何实现IP地址输入控件

本篇内容介绍了"Qt如何实现IP地址输入控件"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、前言

这个IP地址输入框控件,估计写烂了,网上随便一搜索,保证一大堆,估计也是因为这个控件太容易了,非常适合新手练手,一般的思路都是用4个qlineedit控件拼起来,然后每个输入框设置正则表达式过滤只能输入3位数字,然后安装事件过滤器识别回车自动跳到下一个输入框。关于如何设置正则表达式过滤,这个可以搜索查到,本人也不大懂这个规则,貌似还有专门的书籍专门介绍正则表达式,可能这块非常强大。

主要功能:

  1. 可设置IP地址,自动填入框

  2. 可清空IP地址

  3. 支持按下小圆点自动切换

  4. 支持退格键自动切换

  5. 支持IP地址过滤

  6. 可设置背景色/边框颜色/边框圆角角度

二、代码思路

IPAddress::IPAddress(QWidget *parent) : QWidget(parent){    bgColor = "#FFFFFF";    borderColor = "#A6B5B8";    borderRadius = 3;    //用于显示小圆点的标签,居中对齐    labDot1 = new QLabel;    labDot1->setAlignment(Qt::AlignCenter);    labDot1->setText(".");    labDot2 = new QLabel;    labDot2->setAlignment(Qt::AlignCenter);    labDot2->setText(".");    labDot3 = new QLabel;    labDot3->setAlignment(Qt::AlignCenter);    labDot3->setText(".");    //用于输入IP地址的文本框,居中对齐    txtIP1 = new QLineEdit;    txtIP1->setObjectName("txtIP1");    txtIP1->setAlignment(Qt::AlignCenter);    txtIP1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);    connect(txtIP1, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));    txtIP2 = new QLineEdit;    txtIP2->setObjectName("txtIP2");    txtIP2->setAlignment(Qt::AlignCenter);    txtIP2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);    connect(txtIP2, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));    txtIP3 = new QLineEdit;    txtIP3->setObjectName("txtIP3");    txtIP3->setAlignment(Qt::AlignCenter);    txtIP3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);    connect(txtIP3, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));    txtIP4 = new QLineEdit;    txtIP4->setObjectName("txtIP4");    txtIP4->setAlignment(Qt::AlignCenter);    txtIP4->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);    connect(txtIP4, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));    //设置IP地址校验过滤    QRegExp regExp("(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2})");    QRegExpValidator *validator = new QRegExpValidator(regExp, this);    txtIP1->setValidator(validator);    txtIP2->setValidator(validator);    txtIP3->setValidator(validator);    txtIP4->setValidator(validator);    //绑定事件过滤器,识别键盘按下    txtIP1->installEventFilter(this);    txtIP2->installEventFilter(this);    txtIP3->installEventFilter(this);    txtIP4->installEventFilter(this);    QFrame *frame = new QFrame;    frame->setObjectName("frameIP");    QStringList qss;    qss.append(QString("QFrame#frameIP{border:1px solid %1;border-radius:%2px;}").arg(borderColor).arg(borderRadius));    qss.append(QString("QLabel{min-width:15px;background-color:%1;}").arg(bgColor));    qss.append(QString("QLineEdit{background-color:%1;border:none;}").arg(bgColor));    qss.append(QString("QLineEdit#txtIP1{border-top-left-radius:%1px;border-bottom-left-radius:%1px;}").arg(borderRadius));    qss.append(QString("QLineEdit#txtIP4{border-top-right-radius:%1px;border-bottom-right-radius:%1px;}").arg(borderRadius));    frame->setStyleSheet(qss.join(""));    QVBoxLayout *verticalLayout = new QVBoxLayout(this);    verticalLayout->setMargin(0);    verticalLayout->setSpacing(0);    verticalLayout->addWidget(frame);    //将控件按照横向布局排列    QHBoxLayout *layout = new QHBoxLayout(frame);    layout->setMargin(0);    layout->setSpacing(0);    layout->addWidget(txtIP1);    layout->addWidget(labDot1);    layout->addWidget(txtIP2);    layout->addWidget(labDot2);    layout->addWidget(txtIP3);    layout->addWidget(labDot3);    layout->addWidget(txtIP4);}bool IPAddress::eventFilter(QObject *watched, QEvent *event){    if (event->type() == QEvent::KeyPress) {        QLineEdit *txt = (QLineEdit *)watched;        if (txt == txtIP1 || txt == txtIP2 || txt == txtIP3 || txt == txtIP4) {            QKeyEvent *key = (QKeyEvent *)event;            //如果当前按下了小数点则移动焦点到下一个输入框            if (key->text() == ".") {                this->focusNextChild();            }            //如果按下了退格键并且当前文本框已经没有了内容则焦点往前移            if (key->key() == Qt::Key_Backspace) {                if (txt->text().length() <= 1) {                    this->focusNextPrevChild(false);                }            }        }    }    return QWidget::eventFilter(watched, event);}

三、效果图

"Qt如何实现IP地址输入控件"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

输入 地址 控件 内容 正则 表达式 支持 事件 圆点 思路 文本 更多 焦点 知识 边框 过滤器 可设 切换 搜索 强大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库海南医学院 服务器怎么找回删除文件 服务器处理器不支持普通内存么 mysql数据库导入导出 清华大学网络安全专业课程 阿里巴巴云服务器如何升级 西安交大网络安全专业就业 软件开发部门kpi考核指标 怎样导出数据库所有的表格 东莞互联网科技服务有限公司 三菱plc的数据怎么写到数据库 梧州吉屋网络技术有限公司 pubg选哪个服务器好打 简述数据库十大安全威胁 网络安全企业工信政策 数据库的并发性 我的世界好玩的火影忍者服务器 常用几大文献检索数据库 dnf职业输出数据库 如何导手机支付宝数据库 松狮犬视频软件开发 广州安卓软件开发价格 哈工大网络安全实验室 服装erp数据库 天津自动化设备管理软件开发 湖南新一代软件开发服务有哪些 网络安全工程师需求量大吗 任务管理服务器删除不了进程 无线网络技术的有哪些 南京创思网络安全有限公司
0