-1

例...何が間違っているのかわからない... http://doc.qt.digia.com/4.7/qtbinding.html

ここに画像の説明を入力

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QtDeclarative/QDeclarativeView>
#include <QtDeclarative/QDeclarativeEngine>
#include <QtDeclarative/QDeclarativeComponent>
#include <QtDeclarative/QDeclarativeContext>
#include <QDebug>

int main(int argc, char *argv[])
{
    QDeclarativeEngine engine;
    QDeclarativeComponent component(&engine, "MyItem.qml");
    QObject *object = component.create();

    QVariant returnedValue;
    QVariant msg = "Hello from C++";
    QMetaObject::invokeMethod(object, "myQmlFunction",
            Q_RETURN_ARG(QVariant, returnedValue),
            Q_ARG(QVariant, msg));

    qDebug() << "QML function returned:" << returnedValue.toString();
    delete object;

}

// MyItem.qml
import QtQuick 1.0

Item {
    function myQmlFunction(msg) {
        console.log("Got message:", msg)
        return "some return value"
    }
}
4

1 に答える 1

0

QT += 宣言を使用します。QtCreator がそれらを少し無駄に自動生成する場合でも、「core」と「gui」を追加する必要はないことに注意してください。また、mainwindow.h を使用せずに main.cpp からインクルードしていたことに注意してください。そのため、以下でもそれを削除しました。これは私にとってはうまくいきます:

main.pro

TEMPLATE = app
SOURCES += main.cpp
QT += declarative

main.cpp

#include <QtGui/QApplication>
#include <QtDeclarative/QDeclarativeView>
#include <QtDeclarative/QDeclarativeEngine>
#include <QtDeclarative/QDeclarativeComponent>
#include <QtDeclarative/QDeclarativeContext>
#include <QDebug>

int main(int argc, char *argv[])
{
    QDeclarativeEngine engine;
    QDeclarativeComponent component(&engine, "MyItem.qml");
    QObject *object = component.create();

    QVariant returnedValue;
    QVariant msg = "Hello from C++";
    QMetaObject::invokeMethod(object, "myQmlFunction",
        Q_RETURN_ARG(QVariant, returnedValue),
        Q_ARG(QVariant, msg));

    qDebug() << "QML function returned:" << returnedValue.toString();
    delete object;

}

次にqmake && (n)make/jom、テストのために実行します。

于 2013-09-12T03:45:15.420 に答える