【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 ;
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值