Qt初级教程(一)实现简易的计算器
本文原创作者:冯一川(ifeng12358@163.com),如有转载,请注明原作者及出处。
本文软件环境linux(Ubuntu)+Qt 5.6.0。
源代码github地址:Linux下的简易计算器(Qt)
本文使用的技术点有:
1、信号和槽的使用,包括(emit)的使用;
2、字符串的处理,QString函数;
3、QLabel的边框设置。
创建一个QMainWindow项目。
先看界面布局
头文件mianwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//#define QT_NO_OPENGL
#include <QMainWindow>
#include <QString>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void displayInput(QString str);
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_8_clicked();
void on_pushButton_9_clicked();
void on_pushButton_10_clicked();
void on_pushButton_12_clicked();
void on_pushButton_13_clicked();
void on_pushButton_14_clicked();
void on_pushButton_15_clicked();
void on_pushButton_11_clicked();
void on_pushButton_16_clicked();
signals:
void input(QString str);
private:
Ui::MainWindow *ui;
bool _Flag;
};
#endif // MAINWINDOW_H
mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->my_label->setStyleSheet("border:0.5px solid gray;");
ui->my_label->setText("");
_Flag = false;
connect(this,SIGNAL(input(QString)),this,SLOT(displayInput(QString)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::displayInput(QString str)
{
ui->my_label->setText(ui->my_label->text() + str);
}
void MainWindow::on_pushButton_clicked() //num 1
{
emit input(ui->pushButton->text());
}
void MainWindow::on_pushButton_2_clicked() //num 2
{
emit input(ui->pushButton_2->text());
}
void MainWindow::on_pushButton_3_clicked() //num 3
{
emit input(ui->pushButton_3->text());
}
void MainWindow::on_pushButton_4_clicked() //num 4
{
emit input(ui->pushButton_4->text());
}
void MainWindow::on_pushButton_5_clicked() //num 5
{
emit input(ui->pushButton_5->text());
}
void MainWindow::on_pushButton_6_clicked() //num 6
{
emit input(ui->pushButton_6->text());
}
void MainWindow::on_pushButton_7_clicked() //num 7
{
emit input(ui->pushButton_7->text());
}
void MainWindow::on_pushButton_8_clicked() //num 8
{
emit input(ui->pushButton_8->text());
}
void MainWindow::on_pushButton_9_clicked() //num 9
{
emit input(ui->pushButton_9->text());
}
void MainWindow::on_pushButton_10_clicked() //num 0
{
emit input(ui->pushButton_10->text());
}
void MainWindow::on_pushButton_12_clicked() //num +
{
if(_Flag == false)
{
emit input(ui->pushButton_12->text());
_Flag = true;
}else{
on_pushButton_11_clicked();
ui->my_label->setText(ui->my_label->text()+"+");
}
}
void MainWindow::on_pushButton_13_clicked() //num -
{
if(_Flag == false)
{
emit input(ui->pushButton_13->text());
_Flag = true;
}else{
on_pushButton_11_clicked();
ui->my_label->setText(ui->my_label->text()+"-");
}
}
void MainWindow::on_pushButton_14_clicked() //num *
{
if(_Flag == false)
{
emit input(ui->pushButton_14->text());
_Flag = true;
}else{
on_pushButton_11_clicked();
ui->my_label->setText(ui->my_label->text()+"*");
}
}
void MainWindow::on_pushButton_15_clicked() //num /
{
if(_Flag == false)
{
emit input(ui->pushButton_15->text());
_Flag = true;
}else{
on_pushButton_11_clicked();
ui->my_label->setText(ui->my_label->text()+"/");
}
}
void MainWindow::on_pushButton_11_clicked() //num =
{
QString str1 = ui->my_label->text();
if(str1.contains('+',Qt::CaseSensitive))
{
int iPos = str1.indexOf('+',Qt::CaseSensitive);
QString nValue = "";
int iValue = (str1.left(iPos)).toInt()+(str1.right(iPos)).toInt();
nValue = QString("%1").arg(iValue);
ui->my_label->setText(nValue);
_Flag = false;
}else if(str1.contains('-',Qt::CaseSensitive))
{
int iPos = str1.indexOf('-',Qt::CaseSensitive);
QString nValue = "";
int iValue = (str1.left(iPos)).toInt()-(str1.right(iPos)).toInt();
nValue = QString("%1").arg(iValue);
ui->my_label->setText(nValue);
_Flag = false;
}else if(str1.contains('*',Qt::CaseSensitive))
{
int iPos = str1.indexOf('*',Qt::CaseSensitive);
QString nValue = "";
int iValue = (str1.left(iPos)).toInt()*(str1.right(iPos)).toInt();
nValue = QString("%1").arg(iValue);
ui->my_label->setText(nValue);
_Flag = false;
}else if(str1.contains('/',Qt::CaseSensitive))
{
int iPos = str1.indexOf('/',Qt::CaseSensitive);
if((str1.right(iPos))!="0")
{
QString nValue = "";
double iValue = (str1.left(iPos)).toDouble()/(str1.right(iPos)).toDouble();
nValue = QString("%1").arg(iValue);
ui->my_label->setText(nValue);
}else{
ui->my_label->setText("0");
}
_Flag = false;
}
}
void MainWindow::on_pushButton_16_clicked()
{
_Flag = false;
ui->my_label->setText("");
}
main.cpp文件
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
编辑完之后,运行就可以了。
有什么不理解的,大家可以给我发邮件(ifeng12358@163.com)。
源代码地址:Github上的代码地址