亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt簡(jiǎn)單實(shí)現(xiàn)密碼器控件

 更新時(shí)間:2022年06月15日 08:26:45   作者:RabbitChenc  
這篇文章主要為大家詳細(xì)介紹了Qt簡(jiǎn)單實(shí)現(xiàn)密碼器控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Qt自定義一個(gè)密碼器控件的簡(jiǎn)單實(shí)現(xiàn)代碼,供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)構(gòu)思:

密碼器的功能可以看成是計(jì)算器和登陸界面的組合,所以在實(shí)現(xiàn)功能的過(guò)程中借鑒了大神的計(jì)算器的實(shí)現(xiàn)代碼和登陸界面實(shí)現(xiàn)的代碼。

實(shí)現(xiàn)的效果:

關(guān)于密碼器控件的不足:

窗口的標(biāo)題欄不夠漂亮,但是由于對(duì)時(shí)間長(zhǎng)度和任務(wù)進(jìn)度的權(quán)衡,下次一定進(jìn)行重繪。

代碼思路:

由于我司不用樣式表,所以背景由貼圖函數(shù)完成。在widget中添加按鈕控件和文本編輯控件。使用布局函數(shù)進(jìn)行布局,在加上一些簡(jiǎn)單的邏輯處理功能即可。

首先創(chuàng)建一個(gè)工程文件,添加新文件,選擇qt 設(shè)計(jì)師界面類(lèi),如下:

進(jìn)入創(chuàng)建的ui界面后,添加控件進(jìn)行布局,單一的使用了珊格布局,如下:

在自定義控件的布局中遇到了一些與布局相關(guān)的問(wèn)題:

問(wèn)題1:如何改變布局內(nèi)控件的大??? ui中修改方式如下,純代碼實(shí)現(xiàn)也可以去幫助手冊(cè)中查找相同的接口函數(shù)。

問(wèn)題2:布局中控件的位置如何進(jìn)行更改?

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

具體size,自行可以調(diào)整到比較合適的位置。

源碼實(shí)現(xiàn):

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();//可以進(jìn)行提供一個(gè)背景圖片
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,"錯(cuò)誤提示","密碼錯(cuò)誤");
? ? ? ? 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>

//增加對(duì)按鈕類(lèi)型的設(shè)定
//按鈕控件中缺少
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();
? }

? //添加圖標(biāo)
? 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();

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • dev-c++創(chuàng)建lib(靜態(tài)鏈接庫(kù))文件的實(shí)現(xiàn)步驟

    dev-c++創(chuàng)建lib(靜態(tài)鏈接庫(kù))文件的實(shí)現(xiàn)步驟

    本文主要介紹了dev-c++創(chuàng)建lib(靜態(tài)鏈接庫(kù))文件的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C++?OpenGL實(shí)現(xiàn)球形的繪制

    C++?OpenGL實(shí)現(xiàn)球形的繪制

    這篇文章主要主要為大家詳細(xì)介紹了如何利用C++和OpenGL實(shí)現(xiàn)球形的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手嘗試一下
    2022-07-07
  • C++中結(jié)構(gòu)體和Json字符串互轉(zhuǎn)的問(wèn)題詳解

    C++中結(jié)構(gòu)體和Json字符串互轉(zhuǎn)的問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于C++中結(jié)構(gòu)體和Json字符串互轉(zhuǎn)問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 簡(jiǎn)單談?wù)凜++ 中指針與引用

    簡(jiǎn)單談?wù)凜++ 中指針與引用

    下面用通俗易懂的話來(lái)概述一下,指針-對(duì)于一個(gè)類(lèi)型T,T*就是指向T的指針類(lèi)型,也即一個(gè)T*類(lèi)型的變量能夠保存一個(gè)T對(duì)象的地址,而類(lèi)型T是可以加一些限定詞的,引用-引用是一個(gè)對(duì)象的別名,主要用于函數(shù)參數(shù)和返回值類(lèi)型,符號(hào)X&表示X類(lèi)型的引用。
    2015-09-09
  • 使用Matlab制作大富翁小游戲的過(guò)程詳解

    使用Matlab制作大富翁小游戲的過(guò)程詳解

    大富翁大家都玩過(guò),走到建筑的位置可以買(mǎi)地,第二圈走到買(mǎi)過(guò)的地可以升級(jí),別人經(jīng)過(guò)后需要付過(guò)路費(fèi),每次經(jīng)過(guò)起點(diǎn)都會(huì)獲得一定資金,玩到最后還沒(méi)破產(chǎn)的就是勝者,本文將制作一個(gè)Matlab版的大富翁小游戲,需要的可以參考一下
    2022-02-02
  • C++LeetCode數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)詳解

    C++LeetCode數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)詳解

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode數(shù)據(jù)結(jié)構(gòu),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++分析類(lèi)的對(duì)象作類(lèi)成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員

    C++分析類(lèi)的對(duì)象作類(lèi)成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員

    終于到了對(duì)象的初始化和清理的最后階段了,在這里分享一個(gè)cpp里有多個(gè)類(lèi)時(shí),一個(gè)類(lèi)的對(duì)象作為另一個(gè)類(lèi)成員的時(shí)候構(gòu)造函數(shù)和析構(gòu)函數(shù)調(diào)用的時(shí)機(jī)。還有一個(gè)靜態(tài)成員也是經(jīng)??嫉降狞c(diǎn),在這篇博客將會(huì)詳解其概念并舉出案例鞏固,讓我們開(kāi)始
    2022-05-05
  • C++實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    C++實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C/C++自主分配出現(xiàn)double free or corruption問(wèn)題解決

    C/C++自主分配出現(xiàn)double free or corruption問(wèn)題解決

    這篇文章主要為大家介紹了C/C++出現(xiàn)double free or corruption問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • opencv車(chē)道線檢測(cè)的實(shí)現(xiàn)方法

    opencv車(chē)道線檢測(cè)的實(shí)現(xiàn)方法

    這篇文章主要介紹了opencv車(chē)道線檢測(cè)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論