Qt4學習(1)——製作簡單的計算器介面
阿新 • • 發佈:2019-02-18
最近開始接觸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函式將訊號和槽關聯起來。