使用QtCreator 5.3进行Qt Quick UI项目,如何将QML按钮资源链接到C ++函数调用

时间:2014-07-03 14:24:13

标签: qt qml qtquickcontrols

这是我在StackOverflow上的第一篇文章,所以请原谅我可能犯的任何格式错误。

我正在使用Qt Quick Controls 1.1构建一个Qt Quick UI项目,我在QML代码中有一个简单的Button,我想调用我的C ++动作类。我在早期版本的Qt中看到了很多这样的例子,但它们似乎在5.3中没有用。我在项目设置中选择了Qt Quick Controls 1.1。我知道这一定不能太复杂,但我似乎找不到使用QtCreator 5.3的例子

这是我的main.qml文件:

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1

ApplicationWindow {
    id: parentWnd
    visible: true
    width: 640
    height: 480

    Action {
        id: actionSend
        onTriggered: console.log("SEND")
    }

    Button {
        id: send
        text: "Send Request"
        action: actionSend
        signal sendSignal()
    }
}

这是我的main.cpp:

#include <QApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQmlApplicationEngine engine;

    engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

    return app.exec();
}

这是我希望QML按钮调用“doSend”的动作类:

#include<QDebug>
#include<QObject>

class Action : public QObject
{
    Q_OBJECT
public:
    Action();
public slots:
    void doSend();
};

最后这是我的项目文件:

TEMPLATE = app

QT += qml quick widgets

SOURCES += main.cpp \
    action.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Default rules for deployment.
include(deployment.pri)

HEADERS += \
    action.h

当我运行它时,我看到按钮,我看到“SEND”记录到控制台,所以我知道QML操作设置正确。任何关于如何将Action调用放入我的动作类的帮助都将非常感激!

1 个答案:

答案 0 :(得分:0)

您在这里遇到了三个问题。

首先,您Action {Q}} main.cpp int main(int argc, char *argv[]) { QApplication app(argc, argv); qmlRegisterType<Action>("StevesModule", 1, 0, "Action"); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); return app.exec(); } 课程中没有QML:

Action

第二个是registered是Qt Quick Controls模块中的QML类型。它对C ++中的Action类一无所知。如果您想使用Action类而不是Qt Quick Controls的import StevesModule 1.0 类型,则必须将其导入QML文件中:

doSend()

第三是你没有在任何地方调用import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 import StevesModule 1.0 ApplicationWindow { id: parentWnd visible: true width: 640 height: 480 Action { id: actionSend } Button { id: send text: "Send Request" onClicked: actionSend.doSend() } } 位置。您可以在Button的Action中执行此操作:

{{1}}