QT-----案例1:通过面向对象的编程思想实现加法计算器

注:qt生成有界面的.ui,.cpp,.h文件:右键Add New–>Qt–>Qt设计师界面类–>widget

实现:
1.输入两个数字,按“=”按钮显示计算结果
2.两个操作数必须都是合法的数字,拒绝接收任何非法字符
3.两个操作数必须全部合法,“=”按钮才被激活,否则禁用(不可以点击)
4.显示结果的控件只可查看不可修改,但支持复制到剪贴板
5.所有子窗口的大小和位置随主窗口的缩放自动调整至最佳

calculate.h代码:

#ifndef CALCULATE_H
#define CALCULATE_H

#include <QDialog>
#include<QLabel>
#include<QPushButton>
#include<QLineEdit> //行编辑控件
#include<QHBoxLayout> //水平布局器
#include<QDoubleValidator>//验证器

class Calculate:public QDialog{
    Q_OBJECT //moc
public:
    Calculate(void);
public slots:
    //使能等号按钮的槽函数
    void enableButton(void);
    //计算结果和显示的槽函数
    void calcClicked(void);
private:
    QLineEdit* m_editX;//左操作数
    QLineEdit* m_editY;//右操作数
    QLineEdit* m_editZ;//显示结果
    QLabel* m_label; //"+"
    QPushButton* m_button;//"="
};


#endif // CALCULATE_H

calculate.cpp代码:

#include "calculate.h"

//构造函数
Calculate::Calculate(void)
{
    //界面初始化
    //setWindowTitle("计算器");// 设置窗口标题
    m_editX=new QLineEdit(this); //this即为父窗口指针
    //设置文本对齐:右对齐
    m_editX->setAlignment(Qt::AlignRight);
    //设置数字验证器,只能输入数字形式内容
    m_editX->setValidator(new QDoubleValidator(this));

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

    m_editZ=new QLineEdit(this);
    m_editZ->setAlignment(Qt::AlignRight);
    m_editZ->setReadOnly(true);//设置结果只读

    //"+"
    m_label=new QLabel("+",this);

    //"="
    m_button=new QPushButton("=",this);
    m_button->setEnabled(false); //设置禁用

    //创建布局器:自动调用每个控件的大小和位置
    QHBoxLayout* layout = new QHBoxLayout(this);
    //按水平方向 一次将控件添加到布局器中
    layout->addWidget(m_editX);
    layout->addWidget(m_label);
    layout->addWidget(m_editY);
    layout->addWidget(m_button);
    layout->addWidget(m_editZ);

    //设置布局器
    setLayout(layout);

    //信号与槽函数连接
    //左右操作数文本改变时,发送信号textChanged()
    connect(m_editX,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
    connect(m_editY,SIGNAL(textChanged(QString)),this,SLOT(enableButton(void)));
    //点击按钮 发送信号clicked
    connect(m_button,SIGNAL(clicked(void)),this,SLOT(calcClicked(void)));
}

void Calculate::enableButton(void)
{
    bool bXOK,bYOK;
    //text():获取输入文本(QString)
    //toDouble():QString 转换为double,参数保存转换是否成功结果
    m_editX->text().toDouble(&bXOK);
    m_editY->text().toDouble(&bYOK);

    //当左右操作数都输入了有效数据 则使能等号按钮 否则设置禁用
    m_button->setEnabled(bXOK && bYOK);
}

void Calculate::calcClicked(void)
{
    double res=m_editX->text().toDouble()+
            m_editY->text().toDouble();
    //number():将double转换成QString
    QString str=QString::number(res);
    //显示字符串形式结果
    m_editZ->setText(str);
}

main.cpp代码:

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

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

    Calculate calc;
    calc.show();
    return a.exec();
}

结果:
在这里插入图片描述

案例2:获取系统时间
1.使用面向对象的Qt编程技术创建获取时间窗口
2.点击按钮 通过自定义的槽函数获取时间并显示到标签

time.h代码:

#ifndef TIME_H
#define TIME_H

#include<QDialog>
#include<QLabel>
#include<QPushButton>
#include<QVBoxLayout> //垂直布局器
#include<QTime> //时间
#include<QDebug>//打印调试

class Time:public QDialog
{
    Q_OBJECT;
public:
    //构造函数
    Time(void);
public slots:
    //获取系统时间的槽函数
    void getTime(void);
private:
    QLabel* m_label; //显示时间label
    QPushButton* m_button; //获取时间button
};

#endif // TIME_H

time.cpp代码:

#include "Time.h"
#include <QFont>
Time::Time(void)
{
    //初始化界面
    m_label=new QLabel(this);
    //设置label边框消息:凹陷面板
    m_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    //设置label文本对齐方式:水平/垂直居中
    m_label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    //设置label字体大小
    QFont font;
    font.setPointSize(20);
    m_label->setFont(font);

    //获取系统时间的按钮
    m_button=new QPushButton("获取当前时间",this);
    m_button->setFont(font);

    //创建垂直布局器
    QVBoxLayout* layout=new QVBoxLayout(this);
    layout->addWidget(m_label);
    layout->addWidget(m_button);
    //设置布局器
    setLayout(layout);

    //信号与槽函数连接
    connect(m_button,SIGNAL(clicked()),this,SLOT(getTime(void)));
}

void Time::getTime(void)
{
    qDebug("getTime");
    qDebug()<<"getTime";
    //获取当前系统时间
    QTime time=QTime::currentTime();
    //将时间对象转换为字符串
    QString str=time.toString("hh:mm:ss");
    //显示时间
    m_label->setText(str);

}

main.cpp代码:

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Time time;
    time.show();

    return a.exec();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值