小编在期末数据结构课设中遇到要做可视化界面的问题,特意去学习了一下Qt的用法,今天就来给大家分享一下。

我用的是Qt5.80,当然这只是一个简易的计算器Demo,,请大家勿喷。

首先我创建了一个Qt Widgets Application中的一个对话框项目,注意不用把UI文件勾选。

最终的UI界面是这样的:

具体实现代码如下:

 calculator.pro
#-------------------------------------------------
#
# Project created by QtCreator --05T14::
#
#------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, ): QT += widgets TARGET = calculator
TEMPLATE = app # The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0. SOURCES += main.cpp\
calculator.cpp HEADERS += calculator.h
 calculator.cpp
#ifndef CALCULATOR_H
#define CALCULATOR_H #include <QDialog>
#include <QPushButton>
#include <QLineEdit>
#include <QString>
class Dialog : public QDialog
{
Q_OBJECT public:
Dialog(QWidget *parent = );
~Dialog(); protected:
//声明需要的部件;
QPushButton* button_0;
QPushButton* button_1;
QPushButton* button_2;
QPushButton* button_3;
QPushButton* button_4;
QPushButton* button_5;
QPushButton* button_6;
QPushButton* button_7;
QPushButton* button_8;
QPushButton* button_9;
QPushButton* button_plus;
QPushButton* button_minus;
QPushButton* button_multiply;
QPushButton* button_devide;
QPushButton* button_equal;
QPushButton* button_clearAll; QLineEdit* lineEdit;
QLineEdit* lineEdit_1; //声明需要的变量
//第一个数,第二个数,运算结果;
float num1,num2,result;
QString S;//用于显示在lineEdit里面的字符串;
//等号运算符的时候,判断是加、减、乘、除的哪一个
char sign;
int mark;//若点击过加减乘除,mark=2,默认为1; //声明处理按钮的槽函数
private slots:
//按照ui文件默认命名规则
void on_button_0_clicked();
void on_button_1_clicked();
void on_button_2_clicked();
void on_button_3_clicked();
void on_button_4_clicked();
void on_button_5_clicked();
void on_button_6_clicked();
void on_button_7_clicked();
void on_button_8_clicked();
void on_button_9_clicked(); void on_button_plus_clicked();
void on_button_minus_clicked();
void on_button_multiply_clicked();
void on_button_devide_clicked();
void on_button_equal_clicked();
void on_button_clearAll_clicked();
}; #endif // CALCULATOR_H
 calculator.cpp
#include "calculator.h"
#include <QGridLayout> Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
//初始化变量
num1=0.0;
num2=0.0;
result=0.0;
S="";//显示在编辑框的字符串初始化为空
mark=; //表示没有点击过加减乘除
//初始化部件对象指针
button_0=new QPushButton("");
button_1=new QPushButton("");
button_2=new QPushButton("");
button_3=new QPushButton("");
button_4=new QPushButton("");
button_5=new QPushButton("");
button_6=new QPushButton("");
button_7=new QPushButton("");
button_8=new QPushButton("");
button_9=new QPushButton("");
button_plus=new QPushButton("+");
button_minus=new QPushButton("-");
button_multiply=new QPushButton("*");
button_devide=new QPushButton("/");
button_equal=new QPushButton("=");
button_clearAll=new QPushButton("c"); lineEdit=new QLineEdit("请输入所要计算的值");
lineEdit_1=new QLineEdit("ღCL");
//使用网格布局,还有水平和垂直布局
QGridLayout *Grid=new QGridLayout;
Grid->addWidget(lineEdit,,,,,Qt::Alignment());
//参数含义:widget部件指针;所在行;所在列;行宽;列宽;对齐方式;
Grid->addWidget(lineEdit_1,,,,,Qt::Alignment()); Grid->addWidget(button_0,,,Qt::Alignment());
Grid->addWidget(button_1,,,Qt::Alignment());
Grid->addWidget(button_2,,,Qt::Alignment());
Grid->addWidget(button_3,,,Qt::Alignment()); Grid->addWidget(button_4,,,Qt::Alignment());
Grid->addWidget(button_5,,,Qt::Alignment());
Grid->addWidget(button_6,,,Qt::Alignment());
Grid->addWidget(button_7,,,Qt::Alignment()); Grid->addWidget(button_8,,,Qt::Alignment());
Grid->addWidget(button_9,,,Qt::Alignment());
Grid->addWidget(button_plus,,,Qt::Alignment());
Grid->addWidget(button_minus,,,Qt::Alignment()); Grid->addWidget(button_multiply,,,Qt::Alignment());
Grid->addWidget(button_devide,,,Qt::Alignment());
Grid->addWidget(button_equal,,,Qt::Alignment());
Grid->addWidget(button_clearAll,,,Qt::Alignment()); //把Grid布局设置给当前创建的对话框对象
this->setLayout(Grid); //必不可少 //实现连接函数 Connect函数参数 (pushbutton,signal,this指针,slot函数)
connect(button_0,SIGNAL(clicked(bool)),this,SLOT(on_button_0_clicked()));
connect(button_1,SIGNAL(clicked(bool)),this,SLOT(on_button_1_clicked()));
connect(button_2,SIGNAL(clicked(bool)),this,SLOT(on_button_2_clicked()));
connect(button_3,SIGNAL(clicked(bool)),this,SLOT(on_button_3_clicked()));
connect(button_4,SIGNAL(clicked(bool)),this,SLOT(on_button_4_clicked()));
connect(button_5,SIGNAL(clicked(bool)),this,SLOT(on_button_5_clicked()));
connect(button_6,SIGNAL(clicked(bool)),this,SLOT(on_button_6_clicked()));
connect(button_7,SIGNAL(clicked(bool)),this,SLOT(on_button_7_clicked()));
connect(button_8,SIGNAL(clicked(bool)),this,SLOT(on_button_8_clicked()));
connect(button_9,SIGNAL(clicked(bool)),this,SLOT(on_button_9_clicked())); connect(button_plus,SIGNAL(clicked(bool)),this,SLOT(on_button_plus_clicked()));
connect(button_minus,SIGNAL(clicked(bool)),this,SLOT(on_button_minus_clicked()));
connect(button_multiply,SIGNAL(clicked(bool)),this,SLOT(on_button_multiply_clicked()));
connect(button_devide,SIGNAL(clicked(bool)),this,SLOT(on_button_devide_clicked()));
connect(button_equal,SIGNAL(clicked(bool)),this,SLOT(on_button_equal_clicked()));
connect(button_clearAll,SIGNAL(clicked(bool)),this,SLOT(on_button_clearAll_clicked())); } Dialog::~Dialog()
{ } //实现槽函数
void Dialog::on_button_0_clicked()
{
S+="";
lineEdit->setText(S);//把数据设置到编辑框 if(mark==)
{
num1=num1*;//继续添0
}
else
{
num2=num2*;
}
}
void Dialog::on_button_1_clicked()
{
S+="";
lineEdit->setText(S);
if(mark==)
{
num1=num1*+;
}
else
{
num2=num2*+;
}
}
void Dialog::on_button_2_clicked()
{
S+="";
lineEdit->setText(S);
if(mark==)
{
num1=num1*+;
}
else
{
num2=num2*+;
}
}
void Dialog::on_button_3_clicked()
{
S+="";
lineEdit->setText(S);
if(mark==)
{
num1=num1*+;
}
else
{
num2=num2*+;
}
}
void Dialog::on_button_4_clicked()
{
S+="";
lineEdit->setText(S);
if(mark==)
{
num1=num1*+;
}
else
{
num2=num2*+;
}
}
void Dialog::on_button_5_clicked()
{
S+="";
lineEdit->setText(S);
if(mark==)
{
num1=num1*+;
}
else
{
num2=num2*+;
}
}
void Dialog::on_button_6_clicked()
{
S+="";
lineEdit->setText(S);
if(mark==)
{
num1=num1*+;
}
else
{
num2=num2*+;
}
}
void Dialog::on_button_7_clicked()
{
S+="";
lineEdit->setText(S);
if(mark==)
{
num1=num1*+;
}
else
{
num2=num2*+;
}
}
void Dialog::on_button_8_clicked()
{
S+="";
lineEdit->setText(S);
if(mark==)
{
num1=num1*+;
}
else
{
num2=num2*+;
}
}
void Dialog::on_button_9_clicked()
{
S+="";
lineEdit->setText(S);
if(mark==)
{
num1=num1*+;
}
else
{
num2=num2*+;
}
}
void Dialog::on_button_plus_clicked()
{
S+="+";
sign='+';//设置标记为+
mark=; //让其他按钮知道下一个点击的数累加到num2
lineEdit->setText(S);
}
void Dialog::on_button_minus_clicked()
{
S+="-";
sign='-';
mark=;
lineEdit->setText(S);
}
void Dialog::on_button_multiply_clicked()
{
S+="*";
sign='*';
mark=;
lineEdit->setText(S);
}
void Dialog::on_button_devide_clicked()
{
S+="/";
sign='/';
mark=;
lineEdit->setText(S);
}
void Dialog::on_button_equal_clicked()
{
S+="=";
switch(sign)
{
case '+':
result=num1+num2;
break;
case '-':
result=num1-num2;
break;
case '*':
result=num1*num2;
break;
case '/':
result=num1/num2;
break;
default:
break;
}
//S+=QString::number(result,10);//该函数result必须为int型
// S+=QString("%1").arg(result);//float转QString ,S+=保留之前的式子;
//S+=result+'0';result大于等于10时报错
S=QString("%1").arg(result);
lineEdit_1->setText(S);
}
void Dialog::on_button_clearAll_clicked()
{
S="";
//S+="";无法清除
lineEdit->setText(S);
lineEdit_1->setText(S);
mark=;
num1=0.0;
num2=0.0;
result=0.0;
}
 calculator.cpp
#include "calculator.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show(); return a.exec();
}

本Demo中没有用到Qt designer,但是部件的声明和槽函数的声明都是按照designer的默认规则书写的。大体的思路是这样的:在构思好总体的UI布局后,在头文件中声明所需要的部件,不管是按钮、文本编辑框,还是行编辑框,都大同小异;之后在在cpp文件中实现相应的功能。该简易的计算器Demo只能满足两个运算数(原谅小编为小白),通过字符串的操作将0-9,+-*/显示在行编辑框内,最后在用户点击等号时,将float型的结果转化为QString输出。文中还使用了网格布局,在使用时千万不可忘记把布局格式设置给当前所创建的对话框对象(this->setLayout(Grid))。

Qt Creator简单计算器的Demo的更多相关文章

  1. 基于Qt的简单计算器

    界面: UI ui由qtdesign中托控件形成. #ifndef WIDGET_H #define WIDGET_H #include <vector> #include <QWi ...

  2. 用Qt Creator 对 leveldb 进行简单的读写

    #include <iostream> #include <string> #include <leveldb/db.h> #include <boost/l ...

  3. QT creator 其他资源(image)的添加以及简单利用

    QT creator 添加一些资源文件  :https://www.cnblogs.com/cszlg/p/3234786.html(转自园子) 补充: 补充:如果要给生成的exe可执行文件更换一个自 ...

  4. 【原创】QT简单计算器

    代码 //main.cpp #include "calculator_111.h" #include <QtWidgets/QApplication> int main ...

  5. OpenCV与Qt的环境搭建及Demo

    前言: 前段时间写了很多OpenCV的程序,虽然重点在算法上,但图像窗口只能靠cvNamedWindow,效果很不理想.遂希望用Qt配合OpenCV使用,为我的程序建立图形化界面.然而,依我对Open ...

  6. 如何在Qt Creator 创建一个.pri文件

    如何在Qt Creator 创建一个.pri文件 2013年10月09日 ⁄ 综合 ⁄ 共 254字 ⁄ 字号 小 中 大 ⁄ 评论关闭   这个问题很少人写,因为比较简单,但是让却让我花了好大功夫才 ...

  7. Qt Creator 源码学习笔记03,大型项目如何管理工程

    阅读本文大概需要 6 分钟 一个项目随着功能开发越来越多,项目必然越来越大,工程管理成本也越来越高,后期维护成本更高.如何更好的组织管理工程,是非常重要的 今天我们来学习下 Qt Creator 是如 ...

  8. Qt Creator 源码学习笔记04,多插件实现原理分析

    阅读本文大概需要 8 分钟 插件听上去很高大上,实际上就是一个个动态库,动态库在不同平台下后缀名不一样,比如在 Windows下以.dll结尾,Linux 下以.so结尾 开发插件其实就是开发一个动态 ...

  9. Qt环境搭建(Qt Creator)+Visual Studio

    1.http://www.cnblogs.com/ranjiewen/p/5318768.html 简述 经常有人问我编写Qt程序时使用什么IDE,其实这个真的很难回答(各有所长),只能说看个人爱好了 ...

随机推荐

  1. Java----list常用方法汇总

    package ListTest; import java.util.ArrayList; import java.util.Iterator ; import java.util.List; /** ...

  2. 【剑指Offer学习】【面试题50:树中两个结点的最低公共祖先】

    题目:求树中两个结点的最低公共祖先,此树不是二叉树,而且没有指向父节点的指针. 树的结点定义 private static class TreeNode { int val; List<Tree ...

  3. 关于子线程更新UI

    大家都了解的子线程不能更新UI,所以普通青年比方我,遇到耗时操作用到线程时.不得不立刻想到了用handler传递来解决UI更细的问题. 普通青年的做法: 方案:使用Thread+handler方式,h ...

  4. 用泛型创建SqlServerHelper类实现增删改查(一)

    使用泛型,可以构建对数据库单表的基本增删改查. 首先有一数据库 Test_SqlServerHelper ,有2表 接下来创建项目,对数据库进行增删改查. 直接贴代码:(SqlServerHelper ...

  5. IntelliJ IDEA(五) :Settings(中)

    上篇介绍了Settings中的Appearance & Behavior和Keymap,这篇继续,将介绍Editor,Plugins,Version Control. 一.Editor(编辑) ...

  6. 自学Zabbix1.2-zabbix特性

    Zabbix是一个高度集成的网络监控套件,通过一个软件包即可提供如下特性. 概述 Zabbix是一个高度集成的网络监控套件,通过一个软件包即可提供如下特性 数据收集 可用性及性能检测 支持SNMP(t ...

  7. angularf封装echarts

    前言:angular中快速使用echarts 在html使用ehart很简单,你只需要引入文件和按照官方例子按照对应参数配置和数据填充就Ok了,那么在angular中怎么使用eharts(可以使用ec ...

  8. Mixed Reality-宁波市VR/AR技术应用高研班总结

    年,全球AR与VR市场规模将达到1500亿美元,而根据市场研究机构BI Intelligence的统计,2020年仅头戴式VR硬件市场规模将达到28亿美元,未来5年复合增长率超过100%.本次培训从V ...

  9. python作用域与命名空间

    什么是命名空间 比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就 ...

  10. 三十天学不会TCP,UDP/IP网络编程-UDP,从简单的开始

    如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,欢迎去gitbook(https://www.gitbook.com/@rogerzhu/)star我的这一系列文章,虽然说现在这种 ...