1
我正在用C++學習Qt。無法從Qt捕獲發送到QML的信號C++
最近我試圖從C++發出一個信號,並基於此事件更改,我嘗試更新QML
中的某些內容。 emit
不起作用。實際上,調試代碼告訴我,emit
之上和emit
之後的代碼行已經起作用。但emit
本身不工作。
據我瞭解到目前爲止,你emit
從C++信號和on
+ signal name
使用QML
內訪問該事件。
我在這裏做錯了什麼?
這是問題的簡化版本:
emitsignal.h
#ifndef EMITSIGNAL_H
#define EMITSIGNAL_H
#include <QObject>
class EmitSignal : public QObject
{
Q_OBJECT
public:
explicit EmitSignal(QObject *parent = nullptr);
int add(int, int);
signals:
void mySignal();
public slots:
};
#endif // EMITSIGNAL_H
emitsignal.cpp
#include "emitsignal.h"
#include <QDebug>
EmitSignal::EmitSignal(QObject *parent) : QObject(parent) {}
int EmitSignal::add(int x, int y)
{
int z = x + y;
qDebug() << z;
emit mySignal();
return x + y;
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "emitsignal.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<EmitSignal>("com", 1, 0, "EmitSignal");
EmitSignal em;
em.add(1,2);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
main.qml
import QtQuick 2.8
import QtQuick.Window 2.2
import com 1.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
EmitSignal {
id: emitSignal
onMySignal: console.log('Inside the function')
}
}
我正在做類內的對象創建,而不是在主(在我的應用程序),所以沒有辦法創建一個引擎,並從主內部加載它。還是有解決辦法? – Circuitdude
我不理解你,更好地解釋你自己。我的回答對你的問題有幫助嗎?如果你想問我另外一個問題,你可以首先告訴我它是否適合你,如果你有問題,請把它標記爲正確。 – eyllanesc
你的班正在實施一個單身人士? – eyllanesc