先说环境:VS2019 + Qt 5.15.1;
由于工作原因近期要用Qt+VS环境做二次开发,之前是用python较多,因此先拿这个练手熟悉下开发环境,亲测一步一步能跑通;
一、在VS中创建Qt工程
1、VS2019:新建项目-选最下面Qt Widgets Application-输入项目名和路径-下一步;(查到的教程是Qt GUI Application,可能由于版本原因没这个选项,不深究)
2、一路next到这步,选QMainWindow和QWidget都行,要是将来需要菜单栏等组件的话选mainwindow;
勾选了一个Lower,这样生成的.h和.cpp文件名是小写,看个人;
3、创建完成,如下;直接运行可以产生一个空白的QWidget窗口;
二、UI界面设计
1、双击前面图中的calculator.ui文件,弹出Qt Designer。
按住PushButton 和LineEdit拖到右边的设计区域,就添加成功了,多次添加;
2、选中某个添加完成的QPushbutton,可以在右边的属性栏修改组件名和文本内容;完成后效果如下;
3、信号和槽函数串联
点击1,然后按住一个按键往边上一拖点击一下;
出现此窗口,点右边的编辑;
点加号,自己定义槽函数的名称,然后OK;
回到这个界面,两边选中后点ok就完成了这个按键的槽函数关联;
重复此操作,完成所有按键的槽函数关联,这里一共定义了4个,
on_clear_btn_clicked(), on_num_btn_clicked()
on_flag_btn_clicked(), on_action_btn_equal_clicked()
定义完成后可在Qt Designer右下角快速查看,此步骤完成,保存返回;
三、主要槽函数功能实现
1、在calculator.h中对数字、符号、清除、等号的槽函数作声明;
2、在calculator.cpp中完成相应的功能实现,如图所示;
四、调试
测试,成功运行;
完整代码:
1、calculator.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_calculator.h"
class calculator : public QWidget
{
Q_OBJECT
public:
calculator(QWidget *parent = Q_NULLPTR);
private slots:
void on_num_btn_clicked();//数字按键槽函数声明
void on_flag_btn_clicked();//符号按键槽函数声明
void on_action_btn_equal_clicked();//等号按键槽函数声明
void on_clear_btn_clicked();//清除按键槽函数声明
private:
Ui::calculatorClass ui;
};
2、calculator.cpp
#include "calculator.h"
calculator::calculator(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
setWindowTitle(QStringLiteral("计算器"));//起个名,计算器
}
//清除按键槽函数
void calculator::on_clear_btn_clicked() {
ui.lineEdit->setText("");
}
//数字按键槽函数
void calculator::on_num_btn_clicked() {
QPushButton* btn = qobject_cast<QPushButton*>(sender());//得到当前操作的按键
QString number = btn->text();//获取按键上文本的值
ui.lineEdit->insert(number);
}
//符号按键槽函数
void calculator::on_flag_btn_clicked() {
QPushButton* btn = qobject_cast<QPushButton*>(sender());//得到当前操作的按键
QString flag = btn->text();//获取按键上文本的值
ui.lineEdit->insert(flag);
}
//等号按键槽函数
void calculator::on_action_btn_equal_clicked() {
QString result;
result = ui.lineEdit->text();
if (result.isEmpty()) {
return;
}
//加法
if (result.indexOf("+") != -1) {
double i;
i = result.indexOf("+");//获取加号位置
double h;
h = result.leftRef(i).toDouble();//获取加号左边的值
double j;
j = result.rightRef(result.size() - i).toDouble();//获取加号右边的值
double k;
k = h + j;
ui.lineEdit->setText(QString::number(k));//运算结果显示到LineEdit中
}
//减法
if (result.indexOf("-") != -1) {
double i;
i = result.indexOf("-");
double h, j, k;
h = result.leftRef(i).toDouble();
++i;
j = result.rightRef(result.size() - i).toDouble();
k = h - j;
ui.lineEdit->setText(QString::number(k));
}
//乘法
if (result.indexOf("*") != -1) {
double i, h, j, k;
i = result.indexOf("*");
h = result.leftRef(i).toDouble();
++i;
j = result.rightRef(result.size() - i).toDouble();
k = h * j;
ui.lineEdit->setText(QString::number(k));
}
//除法
if (result.indexOf("/") != -1) {
double i, h, j, k;
i = result.indexOf("/");
h = result.leftRef(i).toDouble();
++i;
j = result.rightRef(result.size() - i).toDouble();
k = h / j;
ui.lineEdit->setText(QString::number(k));
}
}
以上。