Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt C++;重载解析选择删除的运算符'='; 所以我刚开始用C++,因为我需要和QT一起玩游戏。但我仍然没有意识到指针,所以我遇到了一些麻烦。我认为这个问题与指针有关,但实际上可能与QT有关_C++_Qt - Fatal编程技术网

Qt C++;重载解析选择删除的运算符'='; 所以我刚开始用C++,因为我需要和QT一起玩游戏。但我仍然没有意识到指针,所以我遇到了一些麻烦。我认为这个问题与指针有关,但实际上可能与QT有关

Qt C++;重载解析选择删除的运算符'='; 所以我刚开始用C++,因为我需要和QT一起玩游戏。但我仍然没有意识到指针,所以我遇到了一些麻烦。我认为这个问题与指针有关,但实际上可能与QT有关,c++,qt,C++,Qt,我在这个项目中有很多场景,所以我想知道哪一个场景当前处于活动状态。为此,我创建了一个类RoomController,因为每个场景都是一个房间的再现。它将是一个简单的类,存储一个QGraphicscene,还具有一个getter和setter方法 头文件 #ifndef ROOMCONTROLLER_H #define ROOMCONTROLLER_H #include <QGraphicsScene> class RoomController: { private: QGr

我在这个项目中有很多场景,所以我想知道哪一个场景当前处于活动状态。为此,我创建了一个类RoomController,因为每个场景都是一个房间的再现。它将是一个简单的类,存储一个QGraphicscene,还具有一个getter和setter方法

头文件

#ifndef ROOMCONTROLLER_H
#define ROOMCONTROLLER_H
#include <QGraphicsScene>

class RoomController:
{
private:
    QGraphicsScene currentRoom;
public:
    RoomController();
    QGraphicsScene getRoom() const;
    void setRoom(QGraphicsScene room);
};

#endif // ROOMCONTROLLER_H
#如果没有房间控制器#
#定义房间控制器
#包括
教室管理员:
{
私人:
QG-SCene电流室;
公众:
RoomController();
qgraphicscene getRoom()常量;
空隙设置室(QS室);
};
#endif//ROOMCONTROLLER\u H
源文件

#include "RoomController.h"
#include <RoomA.h>
#include <QGraphicsScene>
RoomController::RoomController()
{
    currentRoom = new RoomA();
}

char RoomController::getRoom() const
{
    return currentRoom;
}

void RoomController::setRoom(QGraphicsScene room)
{
    currentRoom=room;
}
#包括“RoomController.h”
#包括
#包括
RoomController::RoomController()
{
currentRoom=新RoomA();
}
char RoomController::getRoom()常量
{
回流室;
}
无效房间控制器::设置室(QG房间)
{
当前房间=房间;
}

不能按值返回
QObject
s。用面向对象的说法,任何源于
QObject
的东西都是一个
QObject
(就像沃尔沃是一辆汽车)

您可以通过引用(首选)或指针返回
qgraphicscene
。由于您还打算设置房间的场景,因此您必须决定谁拥有该场景-是您将所有权传递给房间,还是其他人拥有它?在Qt中,您可以使用
QObject
来选择性地管理该所有权,即,如果场景没有父对象,您可以让
RoomController
拥有该场景的所有权,但您必须首先将控制器设置为
QObject
,而且您可能无论如何都想这样做,因为在Qt中大多数“控制器”需要是
QObject
s才能利用事件系统、计时器等

#pragma once // simpler than the #ifdef juggle
#include <QGraphicsScene>

class RoomController : public QObject
{
    Q_OBJECT
    QGraphicsScene *currentRoom = nullptr;
public:
    RoomController(QObject *parent = nullptr) : QObject(parent) {}
    QGraphicsScene &getRoom() const { return *currentRoom; }
    void setRoom(QGraphicsScene *room) {
        Q_ASSERT(room); // this function is only meant to be used with a valid room
        if (currentRoom && currentRoom->parent() == this)
            delete currentRoom;
        currentRoom = room;
        if (!currentRoom->parent())
            currentRoom->setParent(this);
    }
};
#pragma once//比#ifdef杂耍更简单
#包括
类RoomController:公共QObject
{
Q_对象
QGraphicscene*currentRoom=nullptr;
公众:
RoomController(QObject*parent=nullptr):QObject(parent){}
qgraphicscene&getRoom()常量{return*currentRoom;}
无效设置室(QG-SCENE*室){
Q_ASSERT(room);//此函数仅用于有效的room
如果(currentRoom&¤tRoom->parent()==此)
删除当前房间;
当前房间=房间;
如果(!currentRoom->parent())
currentRoom->setParent(此);
}
};
这样,如果
currentRoom
属于
RoomController
,当控制器被销毁时,它将被
QObject::~QObject()
自动删除


旁注:将所有这些微小的单行方法放在一个单独的
.cpp
文件中通常只会使源代码更难理解,因为尽管它做的很少,但它的数量却多得多。一行程序,尤其是访问器(getter/setter),应该保留在头中,因为它们不会以这种方式添加任何额外的源代码行。此外,在简单的项目中,也可以在头文件的类声明中保留短方法——同样,使项目的结构更简单。毕竟,您正在编写一个相当简单的项目,最好保存在一个
.cpp
文件中,因为标题中的错误与您的代码有什么关系?请发布一条完整的错误消息QObject不可复制(如QGraphicscene),在这种情况下,您必须使用指针,将
QGraphicscene
更改为
QGraphicscene*