在这里插入图片描述
工程文件,的说明如上图,
设计的窗口和计算演示如下:
其中test.h的代码如下:
#ifndef TEST1_H
#define TEST1_H
#include <QtWidgets/QMainWindow>
#include "ui_test1.h"
class test1 : public QMainWindow
{
Q_OBJECT
public:
test1(QWidget *parent = 0);
~test1();
//添加这一段代码
public slots://槽函数声明标志
void caculate();
private:
Ui::calculator ui;
};
#endif // TEST1_H
窗口类test1,继承QMainWindow,同时要有Q_OBJECT,它的定义如下:
#define Q_OBJECT \
public: \
Q_OBJECT_CHECK \
QT_WARNING_PUSH \
Q_OBJECT_NO_OVERRIDE_WARNING \
static const QMetaObject staticMetaObject; \
virtual const QMetaObject *metaObject() const; \
virtual void *qt_metacast(const char *); \
virtual int qt_metacall(QMetaObject::Call, int, void **); \
QT_TR_FUNCTIONS \
private: \
Q_OBJECT_NO_ATTRIBUTES_WARNING \
Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \
QT_WARNING_POP \
struct QPrivateSignal {}; \
QT_ANNOTATE_CLASS(qt_qobject, "")
/* qmake ignore Q_OBJECT */
接下来是类的构造函数的声明和析构函数的声明,构造函数和析构函数的定义在test1.cpp里,如下:
`test1::test1(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//添加关联代码,必须放在 setupUi 函数之后,信号与槽机制
connect(ui.cal, SIGNAL(clicked()), this, SLOT(caculate()));
}
test1::~test1()
{
}`
可以看到,构造函数里包含两个东西,第一个是启动Ui函数,第二个是connect函数,将信号SIGNAL(clicked())和槽SLOT(caculate())连接起来,其中ui.cal,cal是click的对象。
其中caculate()函数的定义在test1.cpp中,声明在test1.h中,定义如下:
void test1::caculate()
{
QString estr1 = “can not devide 0!”;
QString estr2 = “please choose caculate option!”;
double n1 = ui.num1->text().toDouble();
double n2 = ui.num2->text().toDouble();
double out = 0;
if (ui.plus->isChecked())
{
out = n1 + n2;
}
else if (ui.minus->isChecked())
{
out = n1 - n2;
}
else if (ui.mutiply->isChecked())
{
out = n1 * n2;
}
else if (ui.div->isChecked())
{
out = n1 / n2;
}
else
{
ui.result->setText(estr2);
return;
}
ui.result->setText(QString::number(out, 'f', 10));
}
main.cpp函数主要运行窗口,
`#include "test1.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
test1 w;
w.show();
return a.exec();
}`