c++ - 向 QGraphicsScene 添加项目时的两个错误

标签 c++ qt

我正在尝试使用 qt 开发一个项目,但我在向场景添加项目时遇到了两个问题! 我有一个包含我的背景对象的类,它在其构造函数中获取指向我的场景的指针。

  1. 我尝试使用“scene->addItem(this)”将背景添加到场景中。但是在运行项目的时候,提示项目已经添加到场景中了!这是我唯一调用 addItem 的地方。

  2. 我也在尝试创建几个类的新对象并将它们放入 QList 中。添加它们时,项目根本不会出现在场景中!

这是类:

class Test : public QObject, public QGraphicsPixmapItem{
    Q_OBJECT
public:
    Test(QGraphicsScene *s){
        scene = s;
        setPixmap(QPixmap("a.jpg"));
        setPos(0, 0);
        scene->addItem(this);
    }
    void mousePressEvent(QGraphicsSceneMouseEvent *event){
        list.push_back(new A(QPixmap("b.png")));
        scene->addItem(list.back());
    }
private:
    QGraphicsScene *scene;
}

附言A是类继承B本身,继承公共(public)QObject和公共(public)QGraphicsPixmapItem。该列表还包含来自类型 (B *) 的几个对象。

最佳答案

我会这样做,没有时间检查它是否编译等。把它作为半个答案 - 但它仍然可以帮助你......

您的问题:

  1. 不要在你的测试类中包含场景——这在架构上是错误的, 你可以在其他地方以更高的逻辑做到这一点..
  2. 也将列表保留在测试类之外......或者我可能不明白你的意图
  3. 总是在你的构造函数中调用父构造函数..有多种原因 - 请注意,当你有一个参数时,它可能会被不正确地转换并调用父构造函数等..也许这会导致你的构造函数出现问题,因为它有一个指针参数到可能传递给 QObject construcor 的场景(然后使用显式关键字 - 这样更安全) - 这些事情很棘手.. 当你有多重继承时,我建议总是像我一样手动调用父构造函数 - 还要检查 this
  4. 为什么要继承QObject?将您的逻辑排除在图形类之外。我认为有一种方法可以在没有信号的情况下处理鼠标单击事件(但我现在懒得搜索了)。

--

class Test : public QObject, public QGraphicsPixmapItem 
{
Q_OBJECT
public:
    Test(QObject *qparent = 0, QGraphicsItem *parent = 0) 
    : QObject(qparent)
    , QGraphicsPixmapItem(parent) {
        setPixmap(QPixmap("a.jpg"));
        setPos(0, 0);
    }
    void mousePressEvent(QGraphicsSceneMouseEvent *event) {
        emit mousePressed();
    }
signals:
    void mousePressed();
}

然后在你的窗口类的某个地方:

WindowClass(etc) : Parent(etc) { //constructor
    QGraphicsScene *scene = new ....;
    Test *test = new Test(this, 0);//can be better, lazy to think of the details
    connect(test, SIGNAL(mousePressed()), this, SLOT(on_testMousePressed());
    scene->addItem(test);
}

void on_testMousePressed() {
    list.push_back(new A(QPixmap("b.png")));
    scene->addItem(list.back());        
}

关于c++ - 向 QGraphicsScene 添加项目时的两个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38369523/

相关文章:

c++ - 如何在 C++ 中将 float 转换为 vector<unsigned char>?

c++ - 从 QObject 继承时,将复制构造函数设置为默认值不起作用

c++ - QT : Cannot find moc file

ruby - QtRuby 与 DRb 或 EventMachine

python - Pyqt - QProcess/readAllStandardOutput() - 编码?

c++ - OpenGL:当两个对象与线绑定(bind)时卡住

c++ - 尝试从 .txt 文件中读取整数并将它们存储在二维数组中

c++ - 在 C++ 中实现包含有效负载的类的最佳实践?

c++ - glCheckFramebufferStatus 返回 0 并且在 glGetError 中没有错误

c++ - 我的应用程序在使用 Do/While 循环解析表时崩溃