首页| 论坛| 消息
主题:IP地址·输入控件
xiaoke123发表于 2020-07-01 11:39
由于用刘总的IP设置背景和边框圆角不生效,又想区别当前焦点状态,故改了一个
IP控件QIPLineEdit部分功能参考刘总和网上一些代码,实现还是有区别,具体功能如下:
IP地址输入框控件
1:可设置IP地址,自动填入框
2:可清空IP地址
3:支持按下小圆点自动切换
4:支持退格键自动切换
5:支持IP地址过滤
6:可设置/边框颜色/边框圆角角度
7.支持焦点切换高亮不同边框颜色
效果可看如下动态图
真实应用效果,遥控器切焦点

关键代码在:paintEvent 和 eventFilter
h头文件
/************************************************************************/
/* Modified by:xiaoke
QQ:1035144170
*/
/************************************************************************/
#ifndef QIPLINEEDIT_H
#define QIPLINEEDIT_H
#include
#include
class QIPLineEdit : public QLineEdit
{
Q_OBJECT
public:
QIPLineEdit(QWidget *parent = 0);
~QIPLineEdit();
//设置IP字符
void setText(const QString &strIP);
//当前IP字符
QString text() const;
//设置焦点边框颜色
void setFocusBorderColor(const QString &focusColor);
//设置边框颜色
void setBorderColor(const QString &borderColor);
//设置边框圆角角度
void setBorderRadius(int borderRadius);
//清空ip字符
void clear();
//设置当前焦点
void setFocus();
protected:
void paintEvent(QPaintEvent *event);
bool eventFilter(QObject *obj, QEvent *ev);
int getIndex(QLineEdit *pEdit);
bool isTextValid(const QString &strIP);
private:
QLineEdit *m_lineEidt[4];
QString focusColor; //焦点边框颜色
QString borderColor;//边框颜色
int borderRadius; //边框圆角角度
};
#endif // QIPLINEEDIT_HCPP实现
/************************************************************************/
/* Modified by:xiaoke
QQ:1035144170
*/
/************************************************************************/
#include "qiplineedit.h"
#include
#include
#include
#include
#include
#include
#pragma execution_character_set("utf-8")
QIPLineEdit::QIPLineEdit(QWidget *parent)
: QLineEdit(parent)
{
focusColor= "#26282C";
borderColor = "#26282C";
borderRadius = 3;
this->setStyleSheet(QString("QIPLineEdit{border:1px solid %1;border-radius:%2px;}").arg(borderColor).arg(borderRadius));
QRegExp rx("(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2})");
QHBoxLayout *pHBox = new QHBoxLayout(this);
pHBox->setSpacing(10);
pHBox->setContentsMargins(5, 5, 5, 5);
for (int i = 0; i < 4; i++)
{
m_lineEidt[i] = new QLineEdit(this);
m_lineEidt[i]->setFrame(false);
m_lineEidt[i]->setMaxLength(3);
m_lineEidt[i]->setAlignment(Qt::AlignCenter);
m_lineEidt[i]->installEventFilter(this);
m_lineEidt[i]->setValidator(new QRegExpValidator(rx, this));
m_lineEidt[i]->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
pHBox->addWidget(m_lineEidt[i]);
}
this->setReadOnly(true);
}
QIPLineEdit::~QIPLineEdit()
{
}
void QIPLineEdit::paintEvent(QPaintEvent *event)
{
__super::paintEvent(event);
QPainter painter(this);
QBrush brush;
brush.setStyle(Qt::BrushStyle::SolidPattern);
brush.setColor(Qt::black);
painter.setBrush(brush);
//qDebug()width() + (i == 0 ? 7 : 10);//布局的间隔
painter.drawEllipse(width, height() / 2 - 2, 4, 4);
}
}
int QIPLineEdit::getIndex(QLineEdit *pEdit)
{
int index = -1;
for (int i = 0; i < 4; i++)
{
if (pEdit == m_lineEidt[i])
index = i;
}
return index;
}
bool QIPLineEdit::eventFilter(QObject *obj, QEvent *ev)
{
if (children().contains(obj) && QEvent::KeyPress == ev->type())
{
QKeyEvent *keyEvent = dynamic_cast(ev);
QLineEdit *pEdit = qobject_cast(obj);

浏览大图

浏览大图
ip控件
浏览大图
附件: ipaddress.zip (9 K) 下载次数:77
附件: ipaddress0724.zip (9 K) 下载次数:162
下一页 (1/5)
回帖(9):
9楼:请教一下,Forms界面上那个 lineEdit_EX组件 是从哪里拖上去的?
8楼:谢谢!大佬,学习了
7楼:cllssg:__super::paintEvent(event);编译不过去,是怎么回事?提示__super没有定义。 (2021 ..

全部回帖(9)»