首页 热点 业界 科技快讯 数码 电子消费 通信 前沿动态 电商

今热点:Qt简单实现密码器控件

2022-06-15 09:55:59 来源 : 软件开发网

本文实例为大家分享了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 #include namespace Ui {class CalculaterForm;}class CalculaterForm : public QWidget{    Q_OBJECTpublic:    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 #include #include 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 class CalacutorButton: public QPushButton{    Q_OBJECTpublic:    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 #include #include #include //增加对按钮类型的设定//按钮控件中缺少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();}

标签: 背景图片 文本编辑 可以调整

相关文章

最近更新
观焦点:超萌相机 2023-03-01 12:29:37
海南百货网 2023-03-01 12:13:44
焦点热讯:宜点充 2023-02-28 10:10:16
天天关注:小铺CEO 2023-02-28 10:07:13
【世界聚看点】KaFit 2023-02-28 09:31:37
葱天下 2023-02-28 09:17:03
渔界竞钓 2023-02-28 08:15:29
焦点快看:鲸奇视频 2023-02-28 06:30:37
环球热议:萝小逗 2023-02-27 23:25:49
简讯:小码公交 2023-02-27 23:16:12
彼岸花 2023-02-27 22:32:52
时时夺宝 2023-02-27 21:37:50
天天动态:袜之源 2023-02-27 21:29:50
天天资讯:AI空气 2023-02-27 20:19:46
世界时讯:绘读 2023-02-27 20:19:41
看点:一元得购 2023-02-27 19:26:28