您的位置:首页 > 编程语言 > Qt开发

Qt4学习(1)——制作简单的计算器界面

2015-06-06 01:48 519 查看
最近开始接触QT,看的是《Qt Creator快速入门》这本书还有网上的的一些视频,Qt使用的4.7.2版本,Qt Creator使用2.1.0版本。 
下面是制作出来的简单计算器界面(界面很简陋,让大家见笑了):



下面是源代码:

//dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QtGui/QDialog>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QGridLayout>
#include <QTextCodec>

class Dialog : public QDialog
{
Q_OBJECT

public:
Dialog(QWidget *parent = 0);
~Dialog();
private:
QPushButton *add_btn;//加按钮
QPushButton *minus_btn;//减按钮
QPushButton *mult_btn;//乘按钮
QPushButton *devide_btn;//除按钮
QLineEdit *line_edit1;//左输入框
QLineEdit *line_edit2;//右输入框
QLabel *result_label;//计算结果
QLabel *left_label;
QGridLayout *layout;//布局控件
private slots:
//定义槽
void add();
void minus();
void multiply();
void devide();

};
#endif // DIALOG_H


//dialog.cpp
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());//设置QObject::tr()所要使用的字符集,否则显示到界面的中文会出现乱码。这里使用指定的字符集,可以自己指定字符集,如QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
setWindowTitle(tr("简单计算器"));
line_edit1 = new QLineEdit(this);//this指定了该控件是dialog的子控件
line_edit2 = new QLineEdit(this);
left_label = new QLabel(this);
left_label->setText(tr("计算结果:"));
result_label = new QLabel(this);
add_btn = new QPushButton(this);
minus_btn = new QPushButton(this);
mult_btn = new QPushButton(this);
devide_btn = new QPushButton(this);

add_btn->setText(tr("加"));
minus_btn->setText(tr("减"));
mult_btn->setText(tr("乘"));
devide_btn->setText(tr("除"));
//使用QGridLayout进行布局
layout = new QGridLayout(this);
layout->addWidget(line_edit1, 0, 0);
layout->addWidget(line_edit2, 0, 1);
layout->addWidget(add_btn, 1, 0);
layout->addWidget(minus_btn, 1, 1);
layout->addWidget(mult_btn, 2, 0);
layout->addWidget(devide_btn, 2, 1);
layout->addWidget(left_label, 3, 0);
layout->addWidget(result_label, 3, 1);
//使用connect函数将发送给按钮的信号和相应的槽关联起来
connect(add_btn, SIGNAL(clicked()), this, SLOT(add()));
connect(minus_btn, SIGNAL(clicked()), this, SLOT(minus()));
connect(mult_btn, SIGNAL(clicked()), this, SLOT(multiply()));
connect(devide_btn, SIGNAL(clicked()), this, SLOT(devide()));
}

Dialog::~Dialog()
{

}

//定义槽
void Dialog::add()
{
QString s1 = line_edit1 ->text();
QString s2 = line_edit2 ->text();
result_label->setText(QString::number(s1.toInt() + s2.toInt()));
}

void Dialog::minus()
{
QString s1 = line_edit1 ->text();
QString s2 = line_edit2 ->text();
result_label->setText(QString::number(s1.toInt() - s2.toInt()));
}
void Dialog::multiply()
{
QString s1 = line_edit1 ->text();
QString s2 = line_edit2 ->text();
result_label->setText(QString::number(s1.toInt() * s2.toInt()));
}
void Dialog::devide()
{
QString s1 = line_edit1 ->text();
QString s2 = line_edit2 ->text();
result_label->setText(QString::number(1.0*s1.toInt() / s2.toInt()));
}

//main.cpp
#include <QtGui/QApplication>
#include "dialog.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();

return a.exec();
}

总结:

1.QWidget类是所有用户界面对象的基类,同时它是继承自QObject类和QPaintDevice类。

2.使用了什么控件就要加入相应的头文件,头文件的名和控件的名字是一样的。

3.上面代码在dialog的构造函数里面使用new创建了许多个子控件但是没有在析构函数~dialog()里面进行delete操作,是因为在Qt中,凡是Widget类或者继承自Widget类,在窗口销毁的时候会自动销毁里面包含的子控件,如果在dialog的构造函数里面没有指明创建的控件为子控件的话,那就要在~dialog()里面进行delete操作。

4.使用QGridLayout布局控件可以对各种子控件进行自动布局。

5.Qt中对事件的响应(如点击事件)可以通过connect函数将信号和槽关联起来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt 界面