Qt自定义控件(IP输入框,windows下)

1.建立自定义控件项目

 组代表后来能从哪里找到

剩下的点“下一步”就行了

2.编辑代码

在生成项目的cpp中添加自己的内容(没有.ui界面了,设计tab是灰色的) 

 放一下我的代码

3.构建

(注意,因为没有main函数和主程序,所以无法运行,构建出动态库就是目的)

IPv4的ip地址格式:(1~255).(0~255).(0~255).(0~255)

另外的知识:计算机网络基础(五)---网络层-IP地址的子网划分 - 知乎 (zhihu.com)

所以我进行分割,对每个进行判断来简化判断,放出代码

以下是 ipinput.h

#ifndef IPINPUT_H
#define IPINPUT_H

#include <QWidget>
#include <QLineEdit>

class IPinput : public QWidget
{
    Q_OBJECT
public:
    IPinput(QWidget *parent = 0);
    QString GetIP();
private slots:
    void Judge(QString str);
private:
    QLineEdit *m_lineEdit;
    QString previousIP;
};

#endif

以下是 ipinput.cpp

#include "ipinput.h"
#include <QRegExp>
#include <QRegExpValidator>

IPinput::IPinput(QWidget *parent) :
    QWidget(parent)
{
    m_lineEdit = new QLineEdit(this);
    connect( m_lineEdit,SIGNAL(textChanged(QString)) ,this,SLOT(Judge(QString)) );
    //正则限制只能写数字和符号.
    QRegExp regExp = QRegExp("[0-9\\.]*");//只能输入数字和小数点
    m_lineEdit->setValidator(new QRegExpValidator(regExp, m_lineEdit));
}


void IPinput::Judge(QString str)
{
    QStringList a = str.split(".");//分割每个小ip

    if(a.size()>4){
        m_lineEdit->setText(previousIP);//还原
        return;
    }

    for(int i=0;i<a.size();i++){
        QString temp = a.at(i);

        //多个0
        if(0==temp.toInt()&&temp.count('0')>1){
            m_lineEdit->setText(previousIP);//还原
            return;
        }
        //超范围了
        if(0>temp.toInt()||255<temp.toInt()){
            m_lineEdit->setText(previousIP);//还原
            return;
        }
        //都大于0了第一位还是0
        if(0<temp.toInt()&&temp.left(1)=="0"){
            m_lineEdit->setText(previousIP);//还原
            return;
        }
    }

    previousIP = str;//合格,设定为当前字符串
}


//对外用,获取ip
QString IPinput::GetIP(){
    QRegExp regExp("((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])[\\.]){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])");
    //不合法返回-1
    if( regExp.exactMatch(previousIP) )
        return previousIP;
    else
        return "-1";
}

以release模式编译构建

找到生成目录,在你的编译目录下,会有dll文件和lib(MinGW编译的是.a文件)

找到动态库,把动态库,也就是图上的.dll(windows的)文件

 拷贝到如下2个目录:

1.Qt的安装目录【我的是 C:\Qt\Qt5.7.0\5.7\mingw53_32\plugins\designer\】

2.Qt Creator的安装目录【我的是 C:\Qt\qtcreator-4.4.1\bin\plugins\designer\】

---然后好像是我生成的.a文件不被Qt Creator用MSVC所兼容,失败了!

4.引用

  将生成并安装的.so 文件复制到qt creator的安装目录bin/designer 中这样再次打开 qt creator就可以在designer窗口中看到自定义的控件了。可以想使用别的qt自带的控件一样使用它。

将 编写自定义控件中所编写的.h .cpp .pri文件拷贝到使用该控件的项目的目录下。

在使用该控件的项目的.pro文件中加入include (***.pri)就可以编译运行了。

参考资料:

QT自定义控件(生成和使用) - OSJ - OSCHINA - 中文开源技术交流社区

利用QT制作自定义控件_yanchong_RD的专栏-CSDN博客

Qt添加自定义控件_逐梦的博客-CSDN博客_qt自定义控件

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超自然祈祷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值