簡體   English   中英

C ++和QML:將QML信號連接到C ++插槽

[英]C++ and QML: Connect QML Signal to C++ Slot

我無法在以下代碼中使用信號連接。 我特別想通過將信號連接到cpp插槽而不設置上下文來做到這一點。 我想問題是

 item->findChild<QObject*>("signalItem");

沒有找到合適的對象? 這里是相關的代碼文件:

main.cpp中:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "include/myclass.h"

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));
    QObject * item = engine.rootObjects().value(0);
    QObject * myObject= item->findChild<QObject*>("signalItem");
    MyClass myClass;
    QObject::connect(item, SIGNAL(testSignal()),&myClass,SLOT(cppSlot()));

    return app.exec();
}

main.qml:

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    visible: true
    width: 800
    height: 460

    Page1 {
        id: page1
        visible: true
    }
}

Page1.qml:

import QtQuick 2.7
import QtQuick.Window 2.2

Item {
    width: 800
    height: 460
    id: signalItem
    objectName: "signalItem"
    signal testSignal()

    CustomButton {
        id: cppSignalButton
        x: 14
        y: 55
        buttonText: "Test CPP Signal"
        onButtonClicked: {
            signalItem.testSignal();
        }
     }
}

因為您要連接item (main.qml)而不是myObject

如果這樣做,它將起作用:

QObject::connect(myObject, SIGNAL(testSignal()),&myClass,SLOT(cppSlot()));

實際上,您還應該添加檢查,以確保從該函數返回的值不為null:

QObject * item = engine.rootObjects().value(0);
QObject * myObject= item->findChild<QObject*>("signalItem");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM