gpt4 book ai didi

qt - 调用 C++ 代码来响应 QML 按钮的最正式方法是什么?

转载 作者:行者123 更新时间:2023-12-02 04:13:49 26 4
gpt4 key购买 nike

使用 qt 5.5、qt Quick Controls 1.4 和下面的 qt Creator 样板代码:调用 C++ 代码以响应按钮的最正式方法是什么(只需将文本调试到屏幕)?

// 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.qrc内的QML文件:

import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")


Button {
id: add
x: 248
y: 222
text: qsTr("add")
}
}

我知道this作为一个可能的答案,但将按钮连接到代码看起来是一种非常复杂的方法!如果这是使用 Qt 5.5 和 QML 的正式方式,那么这应该就是答案。

最佳答案

正如您在 documentation 中看到的那样,你有很多选择:

  • 该类可以注册为可实例化的 QML 类型。这是@BaCaRoZzo 提出的选项
  • 该类可以注册为单例类型
  • 该类的实例可以作为上下文属性或上下文对象嵌入到 QML 代码中
  • Qt QML 模块还提供了从 C++ 代码执行相反操作和操作 QML 对象的方法。这是@hyde 提出的选项

就您而言,我更喜欢最后一个选项,因为它需要更少的代码行。

示例:

ma​​in.cpp

// main cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "myclass.h"

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject *item = engine.rootObjects().first();

MyClass myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));

return app.exec();
}

ma​​in.qml

import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")

signal qmlSignal(string msg)

Button {
id: add
x: 248
y: 222
text: qsTr("add")
onClicked: qmlSignal(text)
}
}

myclass.h

#ifndef MYCLASS_H
#define MYCLASS_H

#include <QObject>
#include <QDebug>

class MyClass : public QObject
{
Q_OBJECT
public slots:
void cppSlot(const QString &msg) {
qDebug() << "Called the C++ slot with message:" << msg;
}
};

#endif // MYCLASS_H

关于qt - 调用 C++ 代码来响应 QML 按钮的最正式方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35001150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com