QML 插槽中未收到 C++ 信号
C++ Signal is not received in QML slot
我有一个 C++ class 可以发出信号。我希望将该信号传递给 QML。
我将对象设置为 qml 应用程序引擎根上下文的上下文 属性。
我的 C++ class
// Sample.h
class Sample : public QObject
{
Q_OBJECT
public:
explicit Sample(QObject *parent = nullptr);
public slots:
void emitSomething();
signals:
void emitted();
public slots:
};
以及实施
// Sample.cpp
Sample::Sample(QObject *parent) : QObject(parent)
{
}
void Sample::emitSomething()
{
emit emitted();
}
我的主要实现。这和qt creator提供的代码很像。
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
Sample sample;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("obj", &sample);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
QTimer::singleShot(1000, &sample, &Sample::emitSomething);
return app.exec();
}
qml实现是
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Connections {
target: obj
onEmitted: function() {
console.log("received")
}
}
}
当我 运行 代码时, emitSomething()
插槽被调用,但我在 qml 中没有看到 emitted()
信号。
我没有 5.9 版,但我用 5.10.1 试过了。在那种情况下,文本不会打印到控制台。我通过更改信号处理程序的语法来修复它。 (只需删除 function()
。)
Connections {
target: obj
onEmitted: {
console.log("received")
}
}
我有一个 C++ class 可以发出信号。我希望将该信号传递给 QML。 我将对象设置为 qml 应用程序引擎根上下文的上下文 属性。
我的 C++ class
// Sample.h
class Sample : public QObject
{
Q_OBJECT
public:
explicit Sample(QObject *parent = nullptr);
public slots:
void emitSomething();
signals:
void emitted();
public slots:
};
以及实施
// Sample.cpp
Sample::Sample(QObject *parent) : QObject(parent)
{
}
void Sample::emitSomething()
{
emit emitted();
}
我的主要实现。这和qt creator提供的代码很像。
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
Sample sample;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("obj", &sample);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
QTimer::singleShot(1000, &sample, &Sample::emitSomething);
return app.exec();
}
qml实现是
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Connections {
target: obj
onEmitted: function() {
console.log("received")
}
}
}
当我 运行 代码时, emitSomething()
插槽被调用,但我在 qml 中没有看到 emitted()
信号。
我没有 5.9 版,但我用 5.10.1 试过了。在那种情况下,文本不会打印到控制台。我通过更改信号处理程序的语法来修复它。 (只需删除 function()
。)
Connections {
target: obj
onEmitted: {
console.log("received")
}
}