博客
关于我
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/

    你可能感兴趣的文章
    Ollama怎么启动.gguf 大模型
    查看>>
    ollama本地部署DeepSeek(Window图文说明)
    查看>>
    ollama运行多模态模型如何进行api测试?
    查看>>
    OMG,此神器可一次定一周的外卖
    查看>>
    Omi 多端开发之 - omip 适配 h5 原理揭秘
    查看>>
    On Error GOTO的好处
    查看>>
    onclick事件的基本操作
    查看>>
    oncopy和onpaste
    查看>>
    onCreate中的savedInstanceState作用
    查看>>
    onCreate()方法中的参数Bundle savedInstanceState 的意义用法
    查看>>
    One good websit for c#
    查看>>
    OneASP 安全公开课,深圳站, Come Here, Feel Safe!
    查看>>
    OneBlog Shiro 反序列化漏洞复现
    查看>>
    oneM2M
    查看>>
    Oneplus5重装攻略
    查看>>
    one_day_one--mkdir
    查看>>
    ONI文件生成与读取
    查看>>
    Online PDF to PNG、JPEG、WEBP、 TXT - toolfk
    查看>>
    onlstm时间复杂度_CRF和LSTM 模型在序列标注上的优劣?
    查看>>
    onlyoffice新版5.1.2版解决中文汉字输入重复等问题
    查看>>