【C/C++学院】(14)QT布局/四则运算计算器

1.布局

QVBoxLayout垂直布局

QHBoxLayout水平布局

QGridLayout表格布局

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    QLineEdit *edit1, *edit2;
    QLabel *label1, *label2;
    QPushButton *btn1, *btn2;
};

#endif // WIDGET_H

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    edit1 = new QLineEdit;
    edit2 = new QLineEdit;
    label1 = new QLabel;
    label2 = new QLabel;
    btn1 = new QPushButton;
    btn2 = new QPushButton;

    label1->setText(tr("姓名"));
    label2->setText(tr("年龄"));
    btn1->setText(tr("确定"));
    btn2->setText(tr("取消"));

    QVBoxLayout *layout_main = new QVBoxLayout(this);
    QHBoxLayout *layout1 = new QHBoxLayout();
    QHBoxLayout *layout2 = new QHBoxLayout();
    QHBoxLayout *layout3 = new QHBoxLayout();

    layout1->addWidget(label1);
    layout1->addWidget(edit1);
    layout2->addWidget(label2);
    layout2->addWidget(edit2);
    layout3->addWidget(btn1);
    layout3->addWidget(btn2);

    layout_main->addLayout(layout1);
    layout_main->addLayout(layout2);
    layout_main->addLayout(layout3);
}

Widget::~Widget()
{

}

2.QGridLayout表格对齐

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    edit1 = new QLineEdit;
    edit2 = new QLineEdit;
    label1 = new QLabel;
    label2 = new QLabel;
    btn1 = new QPushButton;
    btn2 = new QPushButton;

    label1->setText(tr("姓名"));
    label2->setText(tr("年龄"));
    btn1->setText(tr("确定"));
    btn2->setText(tr("取消"));

    QGridLayout *layout = new QGridLayout(this);
    layout->addWidget(label1, 0,0);
    layout->addWidget(edit1, 0,1);
    layout->addWidget(label2, 1,0);
    layout->addWidget(edit2, 1,1);
    layout->addWidget(btn1, 2,0);
    layout->addWidget(btn2, 2,1);

}

Widget::~Widget()
{

}

3.四则运算计算器

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
private slots:
    void on_click();
private:
    QLabel *label1, *label2, *label3, *label4, *label5;
    QLineEdit *edit1, *edit2, *edit3;
    QPushButton *btn1;
};

#endif // DIALOG_H

#include "dialog.h"
#include <QGridLayout>
#include <QVBoxLayout>
#include <QMessageBox>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("计算器"));//设置窗口标题
    label1 = new QLabel;
    label1->setText(tr("请输入数字"));
    label2 = new QLabel;
    label2->setText(tr("请输入运算符"));
    label3 = new QLabel;
    label3->setText(tr("请输入运算符"));
    label4 = new QLabel;
    label4->setText(tr("计算结果"));
    label5 = new QLabel;

    edit1 = new QLineEdit;
    edit2 = new QLineEdit;
    edit3 = new QLineEdit;

    btn1 = new QPushButton;
    btn1->setText(tr("计算"));

    QGridLayout *layout1 = new QGridLayout;
    QVBoxLayout *layout2 = new QVBoxLayout(this);
    layout1->addWidget(label1, 0, 0);
    layout1->addWidget(edit1, 0, 1);
    layout1->addWidget(label2, 1, 0);
    layout1->addWidget(edit2, 1, 1);
    layout1->addWidget(label3, 2, 0);
    layout1->addWidget(edit3, 2, 1);
    layout1->addWidget(label4, 3, 0);
    layout1->addWidget(label5, 3, 1);

    layout2->addLayout(layout1);
    layout2->addWidget(btn1);
    connect(btn1, SIGNAL(clicked()), this, SLOT(on_click()));
}

Dialog::~Dialog()
{

}

void Dialog::on_click()
{
    //调试输出
    //QMessageBox::information(this, "", "hello, world");
    QString str1 = edit1->text();
    QString operate = edit2->text();
    QString str2 = edit3->text();
    if (str1.isEmpty())
    {
        QMessageBox::information(this, "错误", "请输入数字");
        return ;
    }
    if (operate.isEmpty())
    {
        QMessageBox::information(this, "错误", "请输入运算符");
        return ;
    }
    if (str2.isEmpty())
    {
        QMessageBox::information(this, "错误", "请输入数字");
        return ;
    }
    int a = str1.toInt();
    int b = str2.toInt();
    QByteArray array = operate.toUtf8();//将QString转化为QByteArray
    const char c = array[0];//获取运算符
    switch(c)
    {
    case '+':
        label5->setText(QString::number(a+b));
        break;
    case '-':
        label5->setText(QString::number(a-b));
        break;
    case '*':
        label5->setText(QString::number(a*b));
        break;
    case '/':
        if(b == 0)
        {
            QMessageBox::information(this, "错误", "除数不能为0");
            break ;
        }
        label5->setText(QString::number(a/b));
        break;
    default:
        QMessageBox::information(this, "错误", operate+"不是运算符");
        break ;
    }
}

时间: 2024-11-08 19:21:01

【C/C++学院】(14)QT布局/四则运算计算器的相关文章

但是存在了一点问题-数据结构课程设计:十进制二叉树四则运算计算器设计与实现

问题描述 数据结构课程设计:十进制二叉树四则运算计算器设计与实现 #include #include using namespace std; #define Stack_Size 100 typedef char ElemType; typedef struct { char elem[Stack_Size]; int top; }SqStack; void InitStack(SqStack &S) { //初始化顺序栈 // S.elem = new ElemType[Stack_Size

android ndk-线性布局问题 计算器布局

问题描述 线性布局问题 计算器布局 4/09/1428560451_585625.png) 为什么没有出现第一张效果,求解 代码如下: <?xml version="1.0" encoding="utf-8"?> android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="ver

Python实现简单的四则运算计算器_python

一.算法      1.算法的主要思想就是将一个中缀表达式(Infix expression)转换成便于处理的后缀表达式(Postfix expression),然后借助于栈这个简单的数据结构,计算出表达式的结果.      2.关于如何讲普通的表达式转换成后缀表达式,以及如何处理后缀表达式并计算出结果的具体算法描述不在此叙述了,书上有详细的说明. 二.简易计算器 使用说明 使用该计算器类的简单示例如下: # usage c = Calculator() print('result: {:f}'

Android开发实例 四则运算计算器 标准体重计算器

Android开发实例 四则运算计算器 先看计算器效果图 [技术] 关于这个计算器的一些技术,其核心是把中缀表达式转化为后缀表达式,这个时候需要使用一个最基础的数据结构--栈. 具体的操作原理可以参考这个博客 http://www.nowamagic.net/librarys/veda/detail/2307 然而,对于这个问题,早在上学期就已经解决了,但是那时候纯粹是为了Accepted HDU 1237 http://acm.hdu.edu.cn/showproblem.php?pid=12

【C/C++学院】(15)QT布局:用户信息

通过实现一个"用户基本资料修改"的功能表来练习使用基本的布局管理,QHBoxLayout, QVBoxLayout, QGridLayout. #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QLabel> #include <QLineEdit> #include <QComboBox> #include <QTextEdit> #include

求大神,帮我完善C#四则运算计算器

问题描述 由于要求必须有实例和静态方法,可我不知道另外一个方法应该加在哪,求指点(我是新手)publicpartialclassMyCalc:Form{stringnum="";//用于存储1~9数字的Text值stringname2="";//用于储存当前文本值stringgongshi="";//用于存储公式四则运算`DataTabledt=newDataTable();publicMyCalc(){InitializeComponent()

ExtJs学习笔记(14)_Column布局

Column布局有点象传统html中的table的td,但是也有不同的地方: 先看下代码 <script type="text/javascript"> Ext.onReady(function(){ var win=new Ext.Window({ title:"Column Layout", height:300, width:400, plain:true, layout:'column', items:[{ title:"width=5

Android学习笔记(14):相对布局RelativeLayout

相对布局RelativeLayout,继承自ViewGroup.相对布局的子组件的位置总是相对于兄弟组件或者父容器决定的. RelativeLayout支持的XML属性: android:gravity  setGravity(int):设置容器内子组件的对齐方式 android:ignoreGravity  setIgnoreGravity(int):设置哪个子组件不受gravity属性的影响   RelativeLayout有一个内部类RelativeLayout.LayoutParams来

c#用栈实现四则运算计算器

问题描述 #include"stdio.h"#include"string.h"#defineaddress"jisuanqi.txt"charstack[200],out[200];intk=0,t=0;voidup(inta,intb,charflag){intq;if(flag=='*'){q=a*b;out[k]=q+'0';//当q大于9时存入错误,下面除法一样k++;}else{q=(a-'0')/(b-'0');out[k]=q+'