博客
关于我
Qt 简易计算器小程序
阅读量:315 次
发布时间:2019-03-03

本文共 2674 字,大约阅读时间需要 8 分钟。

刚接触Qt,没有使用QtDesigner来编写UI文件,纯用Visual Studio编写项目。这是一个不错的开始,下面将详细介绍项目的结构和实现。

项目结构包括以下几个文件:

  • calculator.h:定义了一个继承自QMainWindow的calculator类,包含了所有必要的UI组件如QLabel、QLineEdit、QRadioButton、QPushButton等。
  • calculator.cpp:实现了calculator类的初始化和布局设置,包括信号和槽的连接。
  • main.cpp:作为主窗口文件,包含了主窗口的构造和布局布局设置。
  • 项目实现

    在calculator.cpp中,首先初始化UI界面:

    calculator::calculator(QWidget *parent) : QMainWindow(parent) {    ui.setupUi(this);    // 初始化各个UI组件    number_1 = new QLabel("数字1:");    number_2 = new QLabel("数字2:");    numline_1 = new QLineEdit;    numline_2 = new QLineEdit;    // 输入验证    QRegExp regx("[0-9]+$");    QValidator *validator = new QRegExpValidator(regx);    numline_1->setValidator(validator);    numline_2->setValidator(validator);    // 运算符组    oper = new QButtonGroup;    plus = new QRadioButton("+");    minus = new QRadioButton("-");    multiply = new QRadioButton("*");    divide = new QRadioButton("/");    oper->addButton(plus);    oper->addButton(minus);    oper->addButton(multiply);    oper->addButton(divide);    oper->setExclusive(true);    // 结果显示    resultlabel = new QLabel("计算结果:");    result = new QLineEdit;    cal = new QPushButton("计算");    cal->setShortcut(QKeySequence("Enter"));    // 布局设置    mainlayout = new QGridLayout(ui.centralWidget);    mainlayout->addWidget(number_1, 0, 0);    mainlayout->addWidget(numline_1, 0, 1, 1, 3);    mainlayout->addWidget(number_2, 1, 0);    mainlayout->addWidget(numline_2, 1, 1, 1, 3);    mainlayout->addWidget(plus, 2, 0);    mainlayout->addWidget(minus, 2, 1);    mainlayout->addWidget(multiply, 2, 2);    mainlayout->addWidget(divide, 2, 3);    mainlayout->addWidget(cal, 3, 0, 1, 4);    mainlayout->addWidget(resultlabel, 4, 0);    mainlayout->addWidget(result, 4, 1, 1, 3);    // 信号和槽连接    connect(cal, SIGNAL(clicked()), this, SLOT(jisuan()));}

    在jisuan()方法中,实现了基本的四则运算:

    void calculator::jisuan() {    QString n1 = numline_1->text();    QString n2 = numline_2->text();    double num1 = n1.toDouble();    double num2 = n2.toDouble();    double res = 0.0;    if (plus->isChecked()) {        res = num1 + num2;    } else if (minus->isChecked()) {        res = num1 - num2;    } else if (multiply->isChecked()) {        res = num1 * num2;    } else if (divide->isChecked()) {        if (num2 == 0) {            result->setText("Error");            return;        }        res = num1 / num2;    }    // 格式化结果    QRegExp rx("(\\.){0,1}0+$");    QString res2 = QString("%1").arg(res, 0, 'f', -1).replace(rx, "");    result->setText(res2);}

    优化建议

  • 输入验证:确保用户只能输入数字,避免非法字符。
  • 运算符管理:使用QButtonGroup来管理不同的运算符,确保只有一个按钮被选中。
  • 结果格式化:使用QRegExp去除小数点后多余的零,确保结果显示简洁。
  • 错误处理:在除法时检查除数是否为零,避免程序崩溃。
  • 通过以上实现,可以构建一个简单的四则运算计算器,用户可以通过Visual Studio编写代码,使用Qt框架进行UI和逻辑开发。

    转载地址:http://apdq.baihongyu.com/

    你可能感兴趣的文章
    QT教程5:消息框
    查看>>
    SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
    查看>>
    pom.xml中提示web.xml is missing and <failonmissingw>...
    查看>>
    Pomelo开发中Web客户端开发API简介
    查看>>
    QT教程2:QT5的体系构架
    查看>>
    PON架构(全光网络)
    查看>>
    PoolingHttpClientConnectionManager原理剖析
    查看>>
    QT教程1:ubuntu18.04安装QT5
    查看>>
    POP-一个点击带有放大还原的动画效果
    查看>>
    POP3 协议在计算机网络中的优缺点
    查看>>
    qt批量操作同类型控件
    查看>>
    Portaudio笔记-WASAPI
    查看>>
    position:fixed失效情况
    查看>>
    Qt开发笔记:QGLWidget、QOpenGLWidget详解及区别
    查看>>
    Position属性四个值:static、fixed、absolute和relative的区别和用法
    查看>>
    POSIX thread编程中关于临界区内条件变量的分析
    查看>>
    POSIX与程序可移植性
    查看>>
    posix多线程有感--自旋锁
    查看>>
    SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
    查看>>
    POSIX标准和XSI扩展
    查看>>