小编在期末数据结构课设中遇到要做可视化界面的问题,特意去学习了一下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. Scala入门系列(十二):隐式转换

    引言 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能可以实现非常强大而且特殊的功 ...

  2. Arrays.asList()生成的List抛UnsupportedOperationException分析

    一.背景:使用工具类 Arrays.asList()把数组转换成集合时,使用其修改集合相关的方 法,它的 add/remove/clear 方法会抛出 UnsupportedOperationExce ...

  3. So, you think you know JavaScript?

    Baranovskiy 参考:http://dmitry.baranovskiy.com/post/91403200   题目一:   if (!("a" in window)) ...

  4. Ext表单验证

    //大家在很多的extjs代码中都看到了这两个,他们都起提示作用的Ext.QuickTips.init();//支持tips提示Ext.form.Field.prototype.msgTarget=' ...

  5. Xcode6 UIWebView与JavaScript交互(issue fix)

    这篇文章中,有介绍UIWebView与JavaScript交互,在UIWebView截获JavaScript请求处理.从app的角度,这是JavaScript的Hook请求. 在Xcode6之前的Ap ...

  6. C++windows内核编程笔记day09_day10,对话框和窗体基本控件等的使用

    //设置字体颜色 SetTextColor(hdc,RGB(255,0,0)); //窗体背景 //wce.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); //wce. ...

  7. C++ 虚指针、成员变量与类对象的偏移地址

    先给出一段代码实现 #include <iostream> using namespace std; class animal { protected: int age; public: ...

  8. 主从DB与cache一致性

    本文主要讨论这么几个问题: (1)数据库主从延时为何会导致缓存数据不一致 (2)优化思路与方案 一.需求缘起 上一篇<缓存架构设计细节二三事>中有一个小优化点,在只有主库时,通过" ...

  9. springCloud项目练习

    1.https://gitee.com/xfdm/FCat angular4.springcloud开源实战项目:FCat项目(springcloud.mybatis.redis.angular4)是 ...

  10. vue双向绑定的原理及实现双向绑定MVVM源码分析

    vue双向绑定的原理及实现双向绑定MVVM源码分析 双向数据绑定的原理是:可以将对象的属性绑定到UI,具体的说,我们有一个对象,该对象有一个name属性,当我们给这个对象name属性赋新值的时候,新值 ...