速度啊网站,企业网站备案提供什么资料,一般做网站的软件,东营有网站一、前言这个IP地址输入框控件#xff0c;估计写烂了#xff0c;网上随便一搜索#xff0c;保证一大堆#xff0c;估计也是因为这个控件太容易了#xff0c;非常适合新手练手#xff0c;一般的思路都是用4个qlineedit控件拼起来#xff0c;然后每个输入框设置正则表达式…一、前言这个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/