广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Qt简单实现密码器控件
  • 391
分享到

Qt简单实现密码器控件

2024-04-02 19:04:59 391人浏览 八月长安
摘要

本文实例为大家分享了Qt自定义一个密码器控件的简单实现代码,供大家参考,具体内容如下 实现构思: 密码器的功能可以看成是计算器和登陆界面的组合,所以在实现功能的过程中借鉴了大神的计算

本文实例为大家分享了Qt自定义一个密码器控件的简单实现代码,供大家参考,具体内容如下

实现构思:

密码器的功能可以看成是计算器和登陆界面的组合,所以在实现功能的过程中借鉴了大神的计算器的实现代码和登陆界面实现的代码。

实现的效果:

关于密码器控件的不足:

窗口的标题栏不够漂亮,但是由于对时间长度和任务进度的权衡,下次一定进行重绘。

代码思路:

由于我司不用样式表,所以背景由贴图函数完成。在widget中添加按钮控件和文本编辑控件。使用布局函数进行布局,在加上一些简单的逻辑处理功能即可。

首先创建一个工程文件,添加新文件,选择qt 设计师界面类,如下:

进入创建的ui界面后,添加控件进行布局,单一的使用了珊格布局,如下:

在自定义控件的布局中遇到了一些与布局相关的问题:

问题1:如何改变布局内控件的大小? ui中修改方式如下,纯代码实现也可以去帮助手册中查找相同的接口函数。

问题2:布局中控件的位置如何进行更改?

*ui->gridLayout->setContentsMargins(QMargins(10,60,0,0));
ui->gridLayout->setVerticalSpacing(10);*

具体size,自行可以调整到比较合适的位置。

源码实现:

calculaterfORM.h

#define CALCULATERFORM_H
#include "calacutorbutton.h"
#include <QWidget>
#include <QLineEdit>

namespace Ui {
class CalculaterForm;
}

class CalculaterForm : public QWidget
{
    Q_OBJECT

public:
    explicit CalculaterForm(QWidget *parent = nullptr);
    ~CalculaterForm();

     void  addLineEdit();
     void addBackImg();//可以进行提供一个背景图片
private slots:

    void on_pushButton_clicked(bool checked);

    void on_pushButton_2_clicked(bool checked);

    void on_pushButton_3_clicked(bool checked);

    void on_pushButton_4_clicked(bool checked);

    void on_pushButton_5_clicked(bool checked);

    void on_pushButton_6_clicked(bool checked);

    void on_pushButton_7_clicked(bool checked);

    void on_pushButton_8_clicked(bool checked);

    void on_pushButton_9_clicked(bool checked);

    void on_pushButton_10_clicked(bool checked);

    void on_pushButton_11_clicked(bool checked);

    void on_pushButton_12_clicked(bool checked);

    void on_pushButton_13_clicked(bool checked);

    void on_pushButton_15_clicked(bool checked);

    void on_pushButton_14_clicked(bool checked);

private:
    Ui::CalculaterForm *ui;
    float mNum1,mNum2,mResult;
    char mSign;
    int mMark;
    QString mKeyStr = "0000";//密码字符串
    QString S;
    QLineEdit *mLineEdit;

};

#endif // CALCULATERFORM_H

calculaterform.cpp

#include "calculaterform.h"
#include "ui_calculaterform.h"
#include <QLineEdit>
#include <QDebug>
#include <QMessageBox>
CalculaterForm::CalculaterForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::CalculaterForm)
{
    ui->setupUi(this);
    mNum1 = 0.0;
    mNum2 = 0.0;
    mResult = 0.0;
    S="";
    mMark=1;
    ui->pushButton_13->setMyIcon("/home/rabbitchenc/Image/dialog_cancel.png");
    ui->pushButton_14->setMyIcon("/home/rabbitchenc/Image/ime_icon_del.png");
    ui->pushButton_15->setMyIcon("/home/rabbitchenc/Image/dialog_ok.png");
    mLineEdit = new QLineEdit(this);
    setFixedSize(width(),height());
    ui->gridLayout->setContentsMargins(QMargins(10,60,0,0));
    ui->gridLayout->setVerticalSpacing(10);
    addBackImg();
    addLineEdit();
    ui->pushButton_10->setEnabled(false);
    ui->pushButton_12->setEnabled(false);
}

//添加文本编辑
void  CalculaterForm::addLineEdit()
{
    if(mLineEdit != nullptr){
        mLineEdit->resize(width(),40);
        mLineEdit->setStyleSheet("background:transparent;border-width:0;border-style:outset");
        mLineEdit->setAlignment(Qt::AlignHCenter);
        mLineEdit->setEchoMode(QLineEdit::PassWord);
    }
}
//添加背景图片
void CalculaterForm::addBackImg()
{
    QString filename = "/home/rabbitchenc/Image/ime_bg.png";
    QPixmap pixmap(filename);
    QPalette pal;
    pixmap = pixmap.scaled(width(),height());
    pal.setBrush(QPalette::Window,QBrush(pixmap));
    setPalette(pal);

}

CalculaterForm::~CalculaterForm()
{
    delete ui;
}

void CalculaterForm::on_pushButton_clicked(bool checked)
{
    S += "1";
    mLineEdit->setText(S);

}

void CalculaterForm::on_pushButton_2_clicked(bool checked)
{
    S += "2";
    mLineEdit->setText(S);

}

void CalculaterForm::on_pushButton_3_clicked(bool checked)
{
    S += "3";
    mLineEdit->setText(S);
}

void CalculaterForm::on_pushButton_4_clicked(bool checked)
{
    S += "4";
    mLineEdit->setText(S);

}

void CalculaterForm::on_pushButton_5_clicked(bool checked)
{
    S += "5";
    mLineEdit->setText(S);
}

void CalculaterForm::on_pushButton_6_clicked(bool checked)
{
    S += "6";
    mLineEdit->setText(S);

}

void CalculaterForm::on_pushButton_7_clicked(bool checked)
{
    S += "7";
    mLineEdit->setText(S);

}

void CalculaterForm::on_pushButton_8_clicked(bool checked)
{
    S += "8";
    mLineEdit->setText(S);
}

void CalculaterForm::on_pushButton_9_clicked(bool checked)
{
    S += "9";
    mLineEdit->setText(S);
}

void CalculaterForm::on_pushButton_10_clicked(bool checked)
{

}

void CalculaterForm::on_pushButton_11_clicked(bool checked)
{
    S += "0";
    mLineEdit->setText(S);
}

void CalculaterForm::on_pushButton_12_clicked(bool checked)
{

}

void CalculaterForm::on_pushButton_13_clicked(bool checked)
{
    this->close();
}

void CalculaterForm::on_pushButton_15_clicked(bool checked)
{

    if(S == mKeyStr)
    {
        qDebug() << "right";
        this->close();
    }else{
        qDebug() << "false";
        QMessageBox *messageBox = new QMessageBox(QMessageBox::Warning,"错误提示","密码错误");
        messageBox->show();
    }
}
void CalculaterForm::on_pushButton_14_clicked(bool checked)
{
    S = S.left(S.length() - 1);
    mLineEdit->setText(S);
}

自定义的按钮源码:
calacutorbutton.h

#ifndef CALACUTORBUTTON_H
#define CALACUTORBUTTON_H
#include <QPushButton>

class CalacutorButton: public QPushButton
{
    Q_OBJECT

public:

    explicit CalacutorButton(QWidget *parent = nullptr);
    ~CalacutorButton();
    void setText(const QString&text);
    void setMyIcon(const QString&icon);
    void setImageName(const QString&img);
    void setPressImg(const QString&img);

protected:
    void paintEvent(QPaintEvent *event);
    void drawText(QPainter *painter);
    void drawImage(QPainter*painter);
    void drawIcon(QPainter*painter);
    QPixmap* ninePatch(QString picName,double iHorzSplit,double iVertSplit, double DstWidth, double DstHeight);
    QPixmap generatePixmap(const QPixmap& img_in, int radius1,int radius2);

private:
    QString  mFileName;
    QString mPressImgName;
    QString mNormalImgName;
    QString mFocusImgName;
    QString mDisableName;
    QString mText;
    QString mIcon;
    int mWidth;
    int mHeight;
    bool pressed;
};

#endif // CALACUTORBUTTON_H

calacutorbutton.cpp

#include "calacutorbutton.h"

#include <QPainter>
#include <QBitmap>
#include <QMouseEvent>
#include <QSizePolicy>

//增加对按钮类型的设定
//按钮控件中缺少
CalacutorButton::CalacutorButton(QWidget *parent):QPushButton(parent)
{
    pressed = false;
    mText = "";
    mIcon = "";
    mPressImgName = "/home/rabbitchenc/Image/btn_ime.png";
    mNormalImgName = "";//不添加图片背景
    mFocusImgName = "";
    mDisableName = "";
    mFileName = mNormalImgName;


    connect(this,&QPushButton::pressed,[=](){
        pressed = true;
        setImageName(mPressImgName);

    });

    connect(this,&QPushButton::released,[=](){

        pressed = false;
        setImageName(mNormalImgName);
    });
}

CalacutorButton::~CalacutorButton()
{

}

void CalacutorButton::paintEvent(QPaintEvent *event)
{
 QPainter painter(this);
 painter.setRenderHint(QPainter::Antialiasing);
 painter.setRenderHint(QPainter::TextAntialiasing);
 drawImage(&painter);
 drawText(&painter);
 drawIcon(&painter);

}
void CalacutorButton::drawImage(QPainter*painter)
{
    painter->save();
    QPixmap pixmap;
    mWidth = width();
    mHeight = height();

    if(isEnabled()){
        if(isCheckable()){
            if(isChecked()){
                mFileName = mPressImgName;
            }else{
                mFileName = mNormalImgName;
            }
            if(pressed){
                mFileName = mFocusImgName;
            }
        }
    }else {
//        mFileName = mDisableName;
}

    pixmap = QPixmap( mFileName);
    painter->drawPixmap(0,0,mWidth,mHeight,pixmap);
    painter->restore();
}

 //添加文字
  void CalacutorButton::drawText(QPainter *painter)
  {
      painter->save();
      QFont font = painter->font();
      painter->drawText(0,0,mWidth,mHeight,Qt::AlignCenter,mText);
      painter->restore();
  }

  //添加图标
  void CalacutorButton::drawIcon(QPainter*painter)
  {
      painter->save();

      QPixmap pixmap(mIcon);
      if(pressed){
          painter->drawPixmap((width()-pixmap.width())/2,(height()-pixmap.height())/2,pixmap.width(),pixmap.height(),pixmap);
      }else{
          painter->drawPixmap((width()-pixmap.width())/2,(height()-pixmap.height())/2,pixmap.width(),pixmap.height(),pixmap);
      }

      painter->restore();
  }

 void CalacutorButton::setText(const QString&text)
 {
     mText = text;
     update();
 }


void CalacutorButton::setMyIcon(const QString &icon)
{
    mIcon = icon;
    update();
}
void CalacutorButton::setImageName(const QString &img)
{
    mFileName = img;

    update();
}


void CalacutorButton::setPressImg(const QString&img)
{
    mPressImgName = img;

    update();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Qt简单实现密码器控件

本文链接: https://www.lsjlt.com/news/151493.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt简单实现密码器控件
    本文实例为大家分享了Qt自定义一个密码器控件的简单实现代码,供大家参考,具体内容如下 实现构思: 密码器的功能可以看成是计算器和登陆界面的组合,所以在实现功能的过程中借鉴了大神的计算...
    99+
    2022-11-13
  • Qt实现简单TCP服务器
    本文实例为大家分享了Qt学习记录之简单的TCP服务器,供大家参考,具体内容如下 简单的多连接TCP服务器​ 本节我们使用Qt来编写一个简单的多连接TCP服务器程序,涉及到的功能有监听...
    99+
    2022-11-13
  • QT实现简单计算器功能
    本文实例为大家分享了QT实现简单计算器功能的具体代码,供大家参考,具体内容如下 效果图: 新建工程,创建类MainWindow,基类是QMainWindow,声明变量和函数、槽 m...
    99+
    2022-11-13
  • Qt实现拖动单个控件移动的示例代码
    目录1.设置窗口拖拽属性2.创建初始控件3.选中控件进行拖动3.1响应mousePressEvent事件3.2判断控件拖动3.3事件处理3.4结束拖动做惯了静态图,今天来搞一搞动态图...
    99+
    2022-11-13
  • Qt实现制作简单的计算器
    目录前言完整代码效果图前言 今天使用qt制作了一个很简单的计算器,觉得挺有意思的,所以在这里跟大家分享一下。 这里先跟大家说说使用到的函数: 1、槽连接函数 connect(信号发送...
    99+
    2022-12-19
    Qt实现计算器 Qt计算器
  • Qt实现解压带有密码的加密文件
    目录1.指定zip压缩包状态2.创建解压文件3.获取实际的压缩数量4.遍历方式创建解压缩文件4.1设置解压文件的参数4.2以读的方式打开加密文件4.3获取当前文件的所有内容4.4创建...
    99+
    2022-11-13
  • QT如何实现简单计算器功能
    这篇文章主要讲解了“QT如何实现简单计算器功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“QT如何实现简单计算器功能”吧!效果图:新建工程,创建类MainWindow,基类是QMainWi...
    99+
    2023-06-30
  • php怎么实现简单密码登录
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php怎么实现简单密码登录?PHP实现最简单的登录界面PHP学习路上的第一个完整的极小极小的项目,总算是看着了做项目的希望了,特意做个记录登录界面:html代码(logi...
    99+
    2021-01-30
    php
  • php如何实现简单密码登录
    php如何实现简单密码登录,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。php实现简单密码登录的方法:1、创建login.html;2、创建login.php;...
    99+
    2023-06-26
  • Qt实现一个简单的word文档编辑器
    目录1.先看效果图2.需要用到的类2.1字体选择下拉框:QFontComboBox。2.2颜色对话框:QColorDialog2.3QTextCharFormat3.源码1.先看效果...
    99+
    2022-11-13
  • Qt实现简易计时器的示例代码
    目录一、项目介绍二、项目基本配置三、UI界面设计四、主程序实现4.1 mainwindow.h头文件4.2 mainwindow.cpp源文件五、效果演示一、项目介绍 计时器实现四个...
    99+
    2022-11-13
  • Android自定义控件实现简单的轮播图控件
    最近要做一个轮播图的效果,网上看了几篇文章,基本上都能找到实现,效果还挺不错,但是在写的时候感觉每次都要单独去重新在Activity里写一堆代码。于是自己封装了一下。本篇轮播图...
    99+
    2022-06-06
    轮播图 轮播 Android
  • 用java给文件加密的简单实现
    思路:文件加密,简单来说就是把文件读取出来,把读取出来的字节码数组进行遍历,把每一个码值和一个秘钥(随便一个数)进行异或运算,将运算后的结果全部写入到文件里。因为文件的码值全都做了改变,文件自然就无法打开了,这是加密过程。解密过程就是再执行...
    99+
    2023-12-23
    java
  • QT实现单词检索软件的示例代码
    功能介绍 1、可检测出英文内容中某个单词出现的次数2、可从英文内容中提取以某个字母为首的所有单词3、可将修改的内容从新保存到txt文件中 源代码 .pro文件 无增改 .h文件 #i...
    99+
    2022-11-13
  • Qt实现可以计算大数的简单计算器
    目录1、简介2、作品演示3、重点原理讲解4、代码主体框架1、简介 计算器是我们生活中很常见的东西,它可以由多种语言多种方式来实现,今天我想讲的是基于C++语言,由QT实现的可以计算大...
    99+
    2022-12-12
    Qt 大数运算 计算器 Qt 计算器 Qt 大数运算
  • C#实现简单的文件加密与解密方式
    目录C#实现文件加密与解密C#进行url加密解密与jquery前端加密解密C#进行url加密与解密jquery总结C#实现文件加密与解密 代码: static class Handl...
    99+
    2023-01-28
    C#文件加密 C#文件解密 C#文件加密解密方式
  • MySQL如何实现密码加密认证的简单脚本
    小编给大家分享一下MySQL如何实现密码加密认证的简单脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! MySQL登录的...
    99+
    2022-10-18
  • Qt如何实现一个简单的word文档编辑器
    本文小编为大家详细介绍“Qt如何实现一个简单的word文档编辑器”,内容详细,步骤清晰,细节处理妥当,希望这篇“Qt如何实现一个简单的word文档编辑器”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.先看效果图...
    99+
    2023-07-02
  • android控件Banner实现简单轮播图效果
    本文实例为大家分享了android控件Banner实现简单轮播图效果的具体代码,供大家参考,具体内容如下 实现这个轮播图是在Fragment里实现的,所以要想实现,首先要创建Frag...
    99+
    2022-11-12
  • Python快速生成随机密码超简单实现
    目录知识点代码解析效果展示知识点 文件读写基础语法字符串处理字符拼接 代码解析 导入模块 import platform import string import random 将...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作