1. 程式人生 > >Qt4學習(1)——製作簡單的計算器介面

Qt4學習(1)——製作簡單的計算器介面

最近開始接觸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函式將訊號和槽關聯起來。