大家好我有一个foo课 Foo.h中的代码
Class Foo : public QObject
{
static Foo* Get(); // Singleton Pattern
Q_INVOKABLE int addFoo();
signals:
void fooAdded(int index);
public slots:
private:
QList<QString> m_fooArray;
}
foo.cpp中的代码
int Foo::addFoo()
{
QString newString = "blah.."
m_fooArray.append(newString);
emit fooAdded(m_fooArray.size()-1);
return m_fooArray.size()-1;
}
我的主要功能代码中的是
{
Foo fooInstance;
qmlRegisterType<GUI::Foo>("xxx", 1, 0, "Foo");
engine.rootContext()->setContextProperty("fooInstance", &fooInstance);
}
现在我有两个xml main.xml和fooTabView.qml
main.xml代码中的是
import QtQuick 2.3
import QtQuick.Controls 1.2
import xxx 1.0
ApplicationWindow {
id: appWindow
visible: true
width: 640
height: 480
FooTabView {
anchors.left: parent.left
anchors.top: parent.top
anchors.margins: 50
}
Button {
id: addFoo
x: 50
y: 59
text: qsTr("Add Connection")
onPressedChanged: fooInstance.addFoo();
}
}
现在当我点击addFoo按钮进行编译和调试时,我的addFoo()函数中的断点被点击并且发出信号fooAdded(index)
在我的FooTabView.qml中我有以下代码
import xxx 1.0
.....
.....
Foo.onFooAdded:
{
.....
}
但是现在当我编译和调试时,我没有得到任何错误,但是我在Foo.onFooAdded中的断点永远不会被点击。
我基本上想要的是,当我点击该按钮时,新的foo会被添加到列表中,而我将拥有在Foo.onFooAdded { ... }
内创建新标签的逻辑
有人可以告诉我我错过了什么或做错了什么?如何将fooAdded(索引)信号连接到QML内的onFooAdded。
请注意我也在FooTabView.xml中尝试了以下代码,但我的断点仍然没有被击中
Connections {
target: fooInstance
onFooAdded: {
...
}
}
我想我不知何故必须连接到fooInstance :: onFooAdded而不是Foo :: onFooAdded但是如果我改为fooInstance :: onFooAdded那么我会得到编译错误
先谢谢
答案 0 :(得分:0)
在我的FooTabView.qml中我有以下代码
import xxx 1.0 ..... ..... Foo.onFooAdded: { ..... }
这部分看起来像附加信号的使用,而不是像对象的信号。尝试通过以下呼叫建立连接:
fooInstance.fooAdded.connect(someJsFunction)
答案 1 :(得分:0)
¿你能尝试从QML中以这种方式捕捉事件吗?
//QML
fooInstance{
onFooAdded: {
}
}
我在Github中有一些代码,有很多可以帮助你的例子,因为QML&lt; - &gt; C ++中的信号和插槽有时候设置起来有些烦人。代码记录在案,但有任何疑问只需要问;)
希望这有帮助!
答案 2 :(得分:0)
使用Connections
是连接上下文属性的正确方法。插槽。我创建了一个类似于你的测试项目,一切正常。
我不完全信任QML断点,因此我建议您使用console.log("...")
语句来检查是否调用了插槽。