一、前言

这个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);
}

三、效果图

四、开源主页

以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。 1. 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo 2. 国际站点:https://github.com/feiyangqingyun/QWidgetDemo 3. 个人主页:https://blog.csdn.net/feiyangqingyun 4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/

qt显示rgba8888 如何改 frame_Qt开源作品17-IP地址输入控件相关推荐

  1. qt显示rgba8888 如何改 frame_Qt音视频开发2-vlc回调处理

    ## 一.前言 用句柄来显示视频,方便是很方便,但是有个缺点就是不能拿到实时视频的每张图片的数据,这个就比较讨厌,大部分的监控行业的应用,除了截图以外,很可能需要拿到图片自己做一些处理的,而且拿到图片 ...

  2. QT程序在不同分辨率电脑上字体变大,溢出控件

    QT程序在不同分辨率电脑上字体变大,溢出控件的解决方法 前言 原因 解决办法 1.main函数中设置全局字体 2.QT Creator中加入样式表 效果 前言 最近开发过程中,发现在本地运行QT程序, ...

  3. [开源]FreeSCADA的通道数据与控件属性关联以及自动刷新机制研究

    [开源]FreeSCADA的通道数据与控件属性关联以及自动刷新机制研究 [参考文章]: 1. WPF之Binding深入探讨, 地址:http://www.cnblogs.com/cappuccino ...

  4. Qt获取wifi列表,连接wifi后获取IP地址

    环境win7+qt5.13+MinGW32,台式机 直接上步骤了,网上看到的略显啰嗦,就是这么简单直接: 1.头文件 #include "windows.h",#include & ...

  5. QT中常用的输入控件

    Qt Creator有15种Input Widgets,如下图:     Input Widgets的Qt类和名称介绍如下表 控件类     控件名     中文名     控件类     控件名   ...

  6. Qt之输入控件(QTextEdit)

    简述 QTextEdit类提供了一个控件,用于编辑和显示纯文本和富文本. QTextEdit是一种高级WYSIWYG(所见即所得)查看器/编辑器,支持使用HTML样式标记的富文本格式.它经过优化,可处 ...

  7. qt 从文件中读出数据显示在表格中_QT中有什么控件可以实现向excel的表格显示,qt数据存储到Excel表格...

    QT 如何读取大数据量的Excel文件? 貌似Excel最多只有1048576行,你这150万行我不知道是怎么放到一个表里面的. 数据100多玩行你可以将数据存放在Access或者其他的数据库中或许会 ...

  8. android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView.闲话休提,言归正转.让我们一起Talk Androi ...

  9. mfc调取摄像头显示并截图_用OpenCV在MFC Dialog中Picture控件上显示摄像头采集实时视频...

    OpenCV之所以能在MFC Dialog的Picture控件上绘图,全靠了CvvImage::DrawToHDC()方法.这就是下文为出现CvvImage和HDC的原因.下面是具体过程,用OpenC ...

最新文章

  1. mqtt 负载均衡_EMQ百万级MQTT消息服务(分布式集群)
  2. asp.net性能的技巧
  3. JPA入门到精通 - JPA入门
  4. mysql Tablespace exists解决
  5. java awt point_100分 解决java import java.awt.Point;import java.awt.Rectangle;
  6. 算法:平衡二叉树110. Balanced Binary Tree
  7. 深度学习优化算法:AdaDelta算法
  8. BIOS 虚拟化技术
  9. JAVA事务@Transactional之propagation
  10. linux unip命令
  11. 第七十五章 SQL命令 START TRANSACTION
  12. 跨境电商亚马逊ERP之如何选择好用的ERP软件
  13. 两个人体红外传感器计数,判断屋里的人数的单片机程序
  14. 如何查询iPhone手机的序列号?苹果序列号查询方法
  15. php解析其他php文件_PHP Include 文件
  16. 关于pd.read_csv() 读数据的注意事项
  17. 大学计算机专业英语期末考试,河南大学计算机专业英语试题
  18. 数据库系统期末总结(一)(往届试卷2018A卷、C卷、E卷选择题)
  19. 四十一 毕设 (上) 我在软件园的那些日子里
  20. Maven私服创建--Nexus

热门文章

  1. php获取周几,php怎么获得星期几
  2. 【Python基础知识-pycharm版】第六节-控制语句
  3. 利用python寻找列表中相邻元素之差绝对值为1的所有最长链
  4. 猪八戒背媳妇用计算机弹出来,猪八戒背媳妇?杭城游泳馆爆笑一幕:浙大学霸果然机智!...
  5. html表单代码例子_关于React的这些细节,你知道吗?-表单
  6. 预训练再次跨界!百度提出ERNIE-GeoL,地理位置-语言联合预训练!
  7. Facebook提出生成式实体链接、文档检索,大幅刷新SOTA!
  8. LightGBM最强解析,从算法原理到代码实现~
  9. 使用Cloud Studio在线编写、调试和管理Spring Boot应用
  10. 论文笔记(SocialGCN: An Efficient Graph Convolutional Network based Model for Social Recommendation)