面向对象的Qt编程实例:计算器的实现

       首先,创建类(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函数之下实例化运行就能得到最后的输出结果。

大家有问题可以私信与我交流~~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值