我有一個發出信號的 C 類。我希望將該信號傳遞給 QML。我將該物件設定為 qml 應用程式引擎根背景關系的背景關系屬性。
我的 C 課
// 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()槽被呼叫,但我emitted()在 qml 中沒有看到信號。
uj5u.com熱心網友回復:
我沒有 5.9 版,但我用 5.10.1 試過了。在這種情況下,文本不會列印到控制臺。我通過更改信號處理程式的語法來修復它。(只需洗掉function()。)
Connections {
target: obj
onEmitted: {
console.log("received")
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/317125.html
上一篇:避免概念的隱式轉換
