gpt4 book ai didi

c++ - 在 QQuickItem 引用上发出信号

转载 作者:行者123 更新时间:2023-11-28 05:35:14 25 4
gpt4 key购买 nike

我有一个 C++ 类 Bar,它包含对另一个类 Foo 的实例的引用。当调用 Bar 上的方法时,我想在 Foo 实例上发出 QML 信号。我已经 20 年没有用 C++ 编写代码了,QML 用来发出信号的语法让我很困惑。

Foo.h

#include <QOpenGLFramebufferObject>
#include <QQuickFramebufferObject>
class Bar;

class Foo : public QQuickFramebufferObject {
Q_OBJECT
public:
Foo();
virtual ~Foo();
signals:
void huzzah();
private:
Bar &bar;
};

Foo.cpp

#include "Foo.h"
...
class Bar: public QObject {
Q_OBJECT
public:
Bar();
~Bar();
void SetItemAttached( QQuickItem &inItem );

public slots:
void BeforeRender();

private:
QQuickItem *foo;
};

void Bar::SetItemAttached( QQuickItem &inItem ) {
foo = &inItem;
}

//************************************************
//* When this method is called I want to emit a
//* signal on foo, not on the bar instance.
//************************************************
void Bar::BeforeRender() {
// I really want something like foo.emit(...)
emit huzzah();
}

Foo::Foo() : bar( *new Bar() ) {
bar.SetItemAttached( *this );
}

Foo::~Foo() {
delete &bar;
}

如何修改上面的 BeforeRender() 方法中的代码以在 foo 上发出信号?

我周围的(QML 新手)C++ 程序员说我必须让 Bar 发出一个虚拟信号,然后将它连接到 Foo 上的插槽在 Foo 上发出信号。这是唯一(或最好)的方法吗?

最佳答案

更新 Bar 类。代替 QQuickItem *foo; 使用 Foo *foo;

class Bar: public QObject {
...
private:
Foo *foo;
};

//and emit the signal
void Bar::BeforeRender() {
emit foo->huzzah();
}

关于c++ - 在 QQuickItem 引用上发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38467895/

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