在QT GUI中创建一个全局对象

Creating a global object in QT GUI

本文关键字:一个 全局 对象 QT GUI 创建      更新时间:2023-10-16

我正在尝试在QT GUI MainWindow文件中创建一个名为X的对象,我希望它是全局。我希望QT的按钮插槽功能能够在对象上执行操作。但是,编译器错误"错误:C4430:丢失类型指定词 - int假定"总是发生。这是标题文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_btOn_clicked();
    void on_btOff_clicked();
private:
    Ui::MainWindow *ui;
    Fan x; // This doesn't work
    Fan * x; // This doesn't either
    int x; // This does work
};
#endif // MAINWINDOW_H

这是CPP文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "fan.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_btOn_clicked()
{
    ui->lblState->setText("Fan is on");
}
void MainWindow::on_btOff_clicked()
{
    x.turnOff(); // This does not work of course
    x->turnOff(); // Or this
    ui->lblState->setText("Fan is off");
}

我已经告诉CPP文件,包括fan.h文件中的风扇类。如果我在窗口构造函数中创建对象,则可以罚款,但不是全局。另外,没有循环包含标头文件。粉丝类不包括MainWindow。

也许我不知道如何搜索它,但是我已经对它进行了一些研究,但无济于事。任何帮助都将不胜感激。

编辑:这是fan.cpp文件

#include "fan.h"
Fan::Fan(){
    speed = 0;
    isOn = false;
}
void Fan::setSpeed(int s){
    speed = s;
}
int Fan::getSpeed(){
    return speed;
}
void Fan::turnOn(){
    isOn = true;
    speed = 1;
}
void Fan::turnOff(){
    isOn = false;
    speed = 0;
}
bool Fan::getState(){
    return isOn;
}

和fan.h文件:

#ifndef FAN_H
#define FAN_H

class Fan
{
private:
    int speed;
    bool isOn;
public:
    Fan();
    void setSpeed(int);
    void turnOn();
    void turnOff();
    int getSpeed();
    bool getState();
};
#endif // FAN_H

您忘记在Header File中包括或声明类风扇。如果您使用

Fan * x;

您可以使用

class Fan;

作为Header File开头的正向声明。编译器只需要知道有一个名为Fan的类,但是在Header内,您只使用指针。屁股别忘了 #include cpp文件中的真实文件。

如果您使用

Fan x;

您必须在 Header-File

#include Fan.h