当前位置:网站首页>Qt加法计算器(简单案例)

Qt加法计算器(简单案例)

2022-07-04 22:34:00 Yinzz2

通过一个小案例学习Qt

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

代码部分:(难点有注释)

test.h

#ifndef _TEST_H
#define _TEST_H

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

class sum:public QDialog
{
       Q_OBJECT
public:
         sum(void);
public slots:
    void enablebutton(void);
    void get_result(void);
private:
    QLineEdit* edit_x;
    QLineEdit* edit_y;
    QLineEdit* edit_z;
    QLabel* m_label;
    QPushButton* m_button;
};

#endif

test.cpp

#include<test.h>

sum::sum(void)
{
  /*--------****初始化各个参数****---------------*/
    setWindowTitle("计算器");

    edit_x = new QLineEdit(this);                      //this即为当前父类指针
    edit_x->setAlignment(Qt::AlignLeft);               //文本左对齐
    edit_x->setValidator(new QDoubleValidator(this));  //设置数字验证器,只能输入数字形式内容

    edit_y = new QLineEdit(this);
    edit_y->setAlignment(Qt::AlignLeft);
    edit_y->setValidator(new QDoubleValidator(this));

    edit_z = new QLineEdit(this);
    edit_z->setAlignment(Qt::AlignLeft);               //设置只读
    edit_z->setReadOnly(true);

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

    m_button = new QPushButton("=",this);
    m_button->setEnabled(false);                       //一开始设置为禁用
 /*--------****创建水平方向的布局器****---------------*/
    QHBoxLayout* layout = new QHBoxLayout(this);
    layout->addWidget(edit_x);
    layout->addWidget(m_label);
    layout->addWidget(edit_y);
    layout->addWidget(m_button);
    layout->addWidget(edit_z);
    setLayout(layout);           //设置布局器
 /*-------********槽函数与信号******----------------*/
    connect(edit_x,SIGNAL(textChanged(QString)),this,SLOT(enablebutton(void)));
    connect(edit_y,SIGNAL(textChanged(QString)),this,SLOT(enablebutton(void)));
    connect(m_button,SIGNAL(clicked(void)),this,SLOT(get_result(void)));
}

//text()获取输入文本(QString) toDouble()将QString转换为Double
void sum::enablebutton(void)
{
    bool judge_x,judge_y;
    edit_x->text().toDouble(&judge_x);
    edit_y->text().toDouble(&judge_y);
    m_button->setEnabled(judge_x && judge_y);

}

//number():将double转换成QString
//setText(const QString &text)
void sum::get_result(void)
{
    double res = edit_x->text().toDouble() + edit_y->text().toDouble();
    QString str = QString::number(res);
    edit_z->setText(str);
}

main.cpp

#include<test.h>
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    sum w;
    w.show();
    return a.exec();
}

实验现象:

原网站

版权声明
本文为[Yinzz2]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_51062259/article/details/125505100