C++面向对象的Qt编程

 实例:加法计算器

Carculator.h文件  

#ifndef __CARCULATOR_H_ 
#define __CARCULATOR_H_

#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit> 
#include <QDoubleValidator> //Double数字验证器
#include <QFont>
#include <QHBoxLayout>

//自定义窗口类
class Carculator:public QWidget{
    Q_OBJECT
public:
    Carculator(void);//构造函数声明
private:
    QLineEdit* m_x;//左操作数
    QLineEdit* m_y;//右操作数
    QLineEdit* m_z; //显示结果
    QLabel* m_label;//+标签
    QPushButton* m_button;//=按钮
    QHBoxLayout* m_layout;//水平布局器

public slots: //自定义槽函数标记
    void enableButton(void); //恢复按钮正常状态槽函数
    void carculator(void);  //计算和显示结果槽函数

};
#endif

 

Carculator.cpp文件

#include "Carculator.h"

Carculator::Carculator(void){  //构造函数
    //界面初始化
    setWindowTitle("加法计算器");  //设置标题
    QFont font;  //创建字体对象
    font.setPointSize(20);  //设置字体大小
    setFont(font);  //给父窗口设置字体

    m_x=new QLineEdit(this);
    m_x->setAlignment(Qt::AlignRight);//设置文本对齐方式
    m_x->setValidator(new QDoubleValidator(this));//设置验证器-只能输入double文本


    m_y=new QLineEdit(this);
    m_y->setAlignment(Qt::AlignRight);
    m_y->setValidator(new QDoubleValidator(this));

    m_z=new QLineEdit(this);
    m_z->setAlignment(Qt::AlignRight);
    m_z->setReadOnly(true);//设为用户只读

    m_label=new QLabel("+",this);
    m_button=new QPushButton("=",this);
    m_button->setEnabled(false);//设置是否可用
    //false  不可用

    m_layout=new QHBoxLayout(this);
    m_layout->addWidget(m_x);  //往布局控件中添加控件-按顺序
    m_layout->addWidget(m_label);
    m_layout->addWidget(m_y); 
    m_layout->addWidget(m_button); 
    m_layout->addWidget(m_z);
    setLayout(m_layout); //窗口添加布局控件
    
    //信号和槽的链接
    connect(m_x,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
    //槽函数是当前父窗口自定义的,所以接受者是this
    connect(m_y,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
    connect(m_button,SIGNAL(clicked(void)),this,SLOT(carculator(void)));

}
void Carculator::enableButton(void){  //恢复按钮正常状态槽函数
    bool bxok;//记录左操作数是否有效数据
    bool byok;//记录右操作数是否有效数据
    m_x->text().toDouble(&bxok);
    //m_x->text  返回文本
    //toDouble  把QString文本转换成double
    m_y->text().toDouble(&byok);
    m_button->setEnabled(bxok && byok);

}
void Carculator::carculator(void){    //计算和显示结果槽函数
    double res=m_x->text().toDouble()  + m_y->text().toDouble();
    QString str=QString::number(res);
    m_z->setText(str);  //设置显示文本

}

 

main.cpp文件

#include <QApplication>
#include "Carculator.h"

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);  

    Carculator win;
    win.show();

    return app.exec();  
}

 

 

 

 

 

 

posted @ 2020-09-12 04:50  天子骄龙  阅读(312)  评论(0编辑  收藏  举报