QT6 设置QLineEdit限制输入ip地址

QT6中对正则部分做了相关修改

QString str = "\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b";
    this->m_OutputLineEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(str)));
    this->m_OutputLineEdit->setInputMask("000.000.000.000");
    this->m_InputLineEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(str)));
    this->m_InputLineEdit->setInputMask("000.000.000.000");

Qt中,如果需要让QLineEdit只能输入IP地址,可以使用`QValidator`类的一个子类——`QRegExpValidator`或更推荐的`QRegularExpressionValidator`(从Qt 5.0开始引入)。通过正则表达式限制用户只能输入合法的IPv4地址。 ### 具体步骤如下: #### 方法一: 使用 `QRegularExpressionValidator` ```cpp #include <QLineEdit> #include <QRegularExpression> #include <QRegularExpressionValidator> // 创建 QLineEdit 对象 QLineEdit *lineEdit = new QLineEdit(); // 定义匹配 IPv4 地址的正则表达式 QRegularExpression regExp(R"(^(?:(?:\d{1,3}\.){3}\d{1,3})$)"); // 验证范围是否在 [0-255] 内 QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp, lineEdit); // 设置验证器到 QLineEdit 中 lineEdit->setValidator(validator); ``` 解释: - 正则表达式 `R"(^(?:(?:\d{1,3}\.){3}\d{1,3})$)"` 匹配标准的点分十进制 IP 格式 (如 `192.168.1.1`)。 - 这里还需要进一步校验每个数字部分是否位于 `[0-255]` 范围内,可以通过自定义槽函数完成。 --- #### 方法二: 自定义槽函数检查有效性 为了确保每段数值都在有效范围内 (`[0-255]`),可以在文本改变信号上连接一个槽函数进行额外检测。 示例代码: ```cpp connect(lineEdit, &QLineEdit::textChanged, this, [&](const QString& text) { QStringList parts = text.split('.'); bool isValid = true; for (const QString& part : parts) { if (!part.isEmpty()) { // 确保非空字符串才能转换成整数 bool ok; int value = part.toInt(&ok); if (!ok || value > 255 || value < 0) { isValid = false; // 如果任意一段超出范围,则无效 break; } } } lineEdit->setStyleSheet(isValid ? "background-color: white;" : "background-color: red;"); }); ``` 上述代码会实时监控用户的输入内容,并动态更改背景颜色以提示其合法性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值