实现构思:
密码器的功能可以看成是计算器和登陆界面的组合,所以在实现功能的过程中借鉴了大神的计算器的实现代码和登陆界面实现的代码。
实现的效果:
关于密码器控件的不足:
窗口的标题栏不够漂亮,但是由于对时间长度和任务进度的权衡,下次一定进行重绘。
代码思路:
由于我司不用样式表,所以背景由贴图函数完成。在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<