首先,创建类(Cal),在其头文件进行相应的声明,在其cpp文件进行相应的实现。最后的运行结果如下图所示。
可以看到实例由三个文本输入框(QLineEdit),输入框分别用于显示两个加数和结果;一个按钮( QPushButton),按钮用于执行加法操作;一个标签框(QLabel),用于显示加号。只有当两个加数输入符合规范时,使用了验证器(QDoubleValidator),按钮才会生效(例如:当有字符出现在加数输入框时,就不能实现加法操作)才能点击实现加法操作。具体Cal的头文件如下:
#ifndef CAL_H
#define CAL_H
#include <QObject>
#include <QDialog>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit> //类似于WPF中的Textbox
#include <QHBoxLayout> //水平布局器
#include <QDoubleValidator>//验证器
#include <QString>
class Cal:public QDialog
{
Q_OBJECT //MOC 将语法扩展内容转换
public:
Cal();//无参构造函数
public slots:
//使能等号按钮的槽操作数
void enableButton();
//计算结果和显示的槽函数
void calcClicked();
private:
QLineEdit* X;
QLineEdit* Y;
QLineEdit* Z;
QLabel* A;
QPushButton* btn;
};
#endif // CAL_H
值得注意的是,此处我们使用了水平布局器(QHBoxLayout),比起逐个控件使用move函数,水平布局器更方便、美观。
Cal的cpp文件如下所示,cpp文件的思想核心在于两点,1.界面的初始化,2,信号和槽函数的连接
#include "cal.h"
Cal::Cal()
{
//界面初始化
setWindowTitle("计算器");
X = new QLineEdit(this);
//设置文本对齐:右对齐,不设置是默认左对齐
X->setAlignment(Qt::AlignRight);
//设置数字验证器,只能输入数字形式内容
X->setValidator(new QDoubleValidator(this));
Y = new QLineEdit(this);
Y->setAlignment(Qt::AlignRight);
Y->setValidator(new QDoubleValidator(this));
Z = new QLineEdit(this);
Z->setAlignment(Qt::AlignRight);
Z->setValidator(new QDoubleValidator(this));
A = new QLabel("+",this);
btn = new QPushButton("=",this);
btn->setEnabled(false); //设置初始状态为禁用
//创建布局器:自动调用每个控件的大小和位置
QHBoxLayout* layout = new QHBoxLayout(this);
//按水平方向,依次将控件加入到布局器中
layout->addWidget(X);
layout->addWidget(A);
layout->addWidget(Y);
layout->addWidget(btn);
layout->addWidget(Z);
//设置布局器,将布局器应用到当前窗口函数之上
setLayout(layout);
//信号和槽函数的连接
connect(X,SIGNAL(textChanged(QString)),this,SLOT(enableButton()));
connect(Y,SIGNAL(textChanged(QString)),this,SLOT(enableButton()));
connect(btn,SIGNAL(clicked()),this,SLOT(calcClicked()));
}
void Cal::enableButton()
{
bool bXOk,bYOk;
//text()用于获取文本(QString)
//toDouble() 将获得的文本内容转换为double,参数保存转换是否成功
X->text().toDouble(&bXOk);
Y->text().toDouble(&bYOk);
btn->setEnabled(bXOk && bYOk);
}
void Cal::calcClicked()
{
double res = X->text().toDouble() + Y->text().toDouble();
//number():将double 转换为 QString
QString str = QString::number(res);
//显示字符串新式结果
Z->setText(str);
}
相应的重点函数都已注释在上,若还有不明白的,大家可以自行查看官方帮助文档。完成上述步骤之后,类创建好之后,在main函数之下实例化运行就能得到最后的输出结果。
大家有问题可以私信与我交流~~~