2

我很难从 QML 中的 C++ 类调用方法。我不断收到“无法调用 null 的方法‘x’”错误。这是我的代码:

QML:

import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Window 2.0
import Jane 1.0

ApplicationWindow
{
    property MainWindowModel m_Model

    ...


            Button {
                id: m_PluralizeButton
                text: "Pluralize"
                anchors.left: parent.left
                anchors.leftMargin: 10
                anchors.top: m_OutputRow.bottom
                anchors.topMargin: 10
                onClicked: m_OutputText.text = m_Model.getPluralization();

            }
        }

主窗口模型.h

class MainWindowModel : public QObject
{
    Q_OBJECT
public:
    MainWindowModel();
    ~MainWindowModel() {}

    Q_INVOKABLE QString getPluralization() const;

private:

};

MainWindoModel.cpp

MainWindowModel::MainWindowModel() :
    QObject()
{
}

QString MainWindowModel::getPluralization() const
{
    return "Test";
}

主文件

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // Need to register types prior to loading the file.
    qmlRegisterType<MainWindowModel>("Jane", 1, 0, "MainWindowModel");
    QQmlApplicationEngine engine(QUrl("qrc:/root/QML/MainWindowView.qml"));
    QObject* topLevel = engine.rootObjects().value(0);
    QQuickWindow* win = qobject_cast<QQuickWindow*>(topLevel);


    if (!win)
    {
        qWarning("Error: not a valid window.");
        return -1;
    }

    win->show();
    return a.exec();
}

任何帮助将不胜感激,谢谢。

4

1 回答 1

2

您需要先创建 MainWindowModel。

QML:

import Jane 1.0

...

MainWindowModel {
    id: m_Model;
}

Button {
    ...
    onClicked: m_OutputText.text = m_Model.getPluralization();
}
于 2013-09-20T02:35:40.933 回答