Temconverter.h文件:
#ifndef TEMPCONVERTER_H
#define TEMPCONVERTER_H
#include <QObject>
class TempConverter : public QObject
{
Q_OBJECT
public:
explicit TempConverter(int tempCelsius, QObject *parent = 0);
int tempCelsius() const { return m_tempCelsius; }
int tempFahrenheit() const { return (int)(m_tempCelsius*1.8+32); }
signals:
void tempCelsiusChanged(int);
void tempFahrenheitChanged(int);
public slots:
void setTempCelsius(int);
void setTempFahrenheit(int);
private:
int m_tempCelsius;
};
#endif // TEMPCONVERTER_H
Temconverter.h文件:
1、#ifndef #define #endif那一套东西
2、include头文件
3、实现TempConverter这一个类
4、注意 Q_OBJECT 宏
5、public里面实现构造函数
6、实现信号与槽
7、核心数据private化
#ifndef CONVERTER_H
#define CONVERTER_H
#include<QObject>
class converter : public QObject
{
Q_OBJECT
public:
explicit converter(int centigrade,QObject* parent = 0);
int returnCenti(converter* cen){return }
int returnF(converter* f){}
public slots:
int setCenDigit(){}
int setFDigit(){}
signals:
void cenValueChanged(){}
void FvalueChanged(){}
private:
int centi
};
# endif
第一次书写问题:
继承时使用:不是双冒号!!!
signal 和 slot都是void类型的
返回值的函数是const类型,无参而且直接return private数据
信号和槽都没有{},只有一个int参数类型,一切放在.cpp文件中实现。
修改后:
#ifndef CONVERTER_H
#define CONVERTER_H
#include<QObject>
class converter : public QObject
{
Q_OBJECT
public:
explicit converter(int centigrade,QObject* parent = 0);
int returnCenti() const{return centi;}
int returnF()const {return (int) centi * 1.8 + 32;}
public slots:
void setCenDigit(int);
void setFDigit(int);
signals:
void cenValueChangedint(int);
void FvalueChanged(int);
private:
int centi;
};
# endif
tempconverter.cpp文件
#include "tempconverter.h"
TempConverter::TempConverter(int tempCelsius, QObject *parent) :
QObject(parent), m_tempCelsius(tempCelsius)
{
}
void TempConverter::setTempCelsius(int tempCelsius)
{
if(m_tempCelsius == tempCelsius)
return;
m_tempCelsius = tempCelsius;
emit tempCelsiusChanged(m_tempCelsius);
emit tempFahrenheitChanged(tempFahrenheit());
}
void TempConverter::setTempFahrenheit(int tempFahrenheit)
{
int tempCelsius = (5.0/9.0)*(tempFahrenheit-32);
setTempCelsius(tempCelsius);
}
1、#include.h头文件
2、参数初始化列表构造函数
3、实现槽函数并发射信号,注意防止死循环,注意私有数据只有centi一个,所以F的数据都得转化过来!
#include"converter.h"
converter::converter(int centigrade,QObject* parent)
:centi(centigrade)
{
}
void converter::setCenDigit(int tem_centi)
{
if(centi == tem_centi)
return;
centi = tem_centi;
emit cenValueChanged(centi);
emit FvalueChanged(returnF());
}
void converter::setFDigit(int tem_f)
{
int tem_centi = (int)((tem_f - 32) / 1.8);
setCenDigit(tem_centi);
}
问题:
信号与槽函数都为void
emit信号函数的实参是private数据
通过centigrade来实现F的录入系统
Widget.h/mainwindow.h文件
(ifndef 等都已经预先编写)
1、include converter.h文件
2、在widget类的private中增加了一个converter类指针!!!
几乎没有动其他内容
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include "tempconverter.h"
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
TempConverter *tempConverter;
};
#endif // WIDGET_H
修改后:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include"converter.h" //这里没有include会导致倒数第二行定义类指针报错!!!
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
converter *pconver;//就是必须include"converter.h"
};
#endif // MAINWINDOW_H