首先先看下这个程序的运行的demo,效果图如下:
在这个小程序中,有些值得注意的东西,就是包含如下:
1.文本编辑框
2.一系列的控件
在上面的控件类Button都是继承自QToolButton类,并重写了其中的sizeHint()函数,让宽度拉升
具体代码如下:
#ifndef BUTTON_H
#define BUTTON_H
#include<QToolButton>
class Button : public QToolButton
{
Q_OBJECT
public:
explicit Button(const QString &text , QWidget *parent = 0);
~Button();
QSize sizeHint() const Q_DECL_OVERRIDE;
};
#endif // BUTTON_H
#include "button.h"
#include<QtWidgets>
Button::Button(const QString& text , QWidget* parent):QToolButton(parent)
{
setSizePolicy(QSizePolicy::Expanding , QSizePolicy::Preferred);
setText(text);
}
Button::~Button()
{
}
QSize Button::sizeHint() const {
QSize size = QToolButton::sizeHint();
size.rheight() += 20;
size.rwidth() = qMax(size.width() , size.height());
return size;
}
然后就是在主窗口类中完成按钮的添加,以及窗口的布局,还有就是逻辑处理等代码了,具体如下:
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <QWidget>
QT_BEGIN_NAMESPACE
class QLineEdit;
QT_END_NAMESPACE
class Button;
class Calculator : public QWidget
{
Q_OBJECT
public:
explicit Calculator(QWidget *parent = 0);
~Calculator();
signals:
private slots:
//数字点击
void digitClicked();
//一元操作点击
void unaryOperatorClicked();
//加法操作
void additiveOperatorClicked();
//乘法操作
void multiplicativeOperatorClicked();
//
void equalClicked();
void pointClicked();
void changeSignClicked();
void backspaceClicked();
void clear();
void clearAll();
void clearMemory();
void readMemory();
void setMemory();
void addToMemory();
private:
Button* createButton(const QString& text ,const char* memory );
void abortOperation();
bool calculate(double rightOperand , const QString &pendingOperator);
double sumInMemory;
double sumSoFar;
double factorSoFar;
QString pendingAdditiveOperator;
QString pendingMultiplicatibeOperator;
bool waitingForOperand;
QLineEdit *display;
enum {
NumDigitButtons = 10
};
Button* digitButtons[NumDigitButtons];
};
#endif // CALCULATOR_H
#include "calculator.h"
#include<QtWidgets>
#include<math.h>
#include"button.h"
Calculator::Calculator(QWidget *parent) : QWidget(parent)
{
//变量的初始化
sumInMemory = 0.0;
sumSoFar = 0.0;
factorSoFar = 0.0;
waiti