gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:13:58 24 4
gpt4 key购买 nike

我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com