错误

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值