gpt4 book ai didi

c++ - 使用 Q_INVOKABLE 将 C++ 与 QML 连接起来

转载 作者:IT老高 更新时间:2023-10-28 23:15:15 27 4
gpt4 key购买 nike

我有一个 Qt 函数:

void MainWindow::button_clicked(Qstring a, Qstring b, Qstring c, Qstring d)

我从 QML 收集数据,我想将数据传递给 Qt 中的这个函数。所以我知道我需要使用 Q_INVOKABLE 但不知道如何使用它。

另外一件事是在调用上面的某个函数时可以调用其他函数。
例如:我调用了上面的函数,但在她的 body 里我调用了 refresh() 函数。这可能吗?

最佳答案

为了能够从 QML 调用方法,您必须使用 Q_INVOKABLE 或将其标记为插槽。如果 Q_INVOKABLE 不打算用作插槽,我更喜欢它,因为它更小。

class MainWindow : public QMainWindow {
Q_OBJECT
public:
...
Q_INVOKABLE void buttonClicked( const QString& a, const QString& b, const QString& c, const QString& d );
....
};

void MainWindow::buttonClicked( const QString& a, const QString& b, const QString& c, const QString& d ) {
...do stuff
update(); //example
}

buttonClicked() 的实现可以包含任何 C++ 代码。

要使主窗口实例可以从 QML 访问,您必须注册它,例如

QDeclarativeView* view = ...your view
view->rootContext()->setContextProperty( "_mainWindow", mainWindow );

注册后,你可以从 QML 调用 buttonClicked:

_mainWindow.buttonClicked("foo", "bar", "c", "d")

关于c++ - 使用 Q_INVOKABLE 将 C++ 与 QML 连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9341005/

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