c++ - 在 Qt 中连接多个信号和槽

标签 c++ qt qml qt-quick

我正在自学如何使用 Qt,我已经到了需要大量信号/槽的地步,以供用户与窗体上的控件交互时使用。

我已经设法让信号和槽工作,但我想连接相当多的信号和槽,为了让我的代码易于管理,如果有的话,让它们在它们自己的单独函数中会很好可能。

到目前为止,我没有运气将它们从我的主要功能中移出我已经成功地将对象移动到全局,这似乎仍然有效但对我没有太大帮助,从那里尝试移动引擎或应用程序只有导致错误。据我所知,如果我确实尝试在一个单独的函数中连接它们,那么连接将在任何此类函数返回的第二个时间点崩溃。

目前我有一些看起来像这样工作的东西:

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

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    QObject *object = engine.rootObjects()[0];

    controls myClass;
    QObject::connect(object, SIGNAL(taskComplete(int)), &myClass, SLOT(taskComplete(int)));

    return app.exec();
  }

我有哪些选项可以让我不必将它们全部塞进 main 中?

免责声明:到目前为止,我在探索 Qt 方面运气不佳,因此我不知道自己在做什么,如果我完全找错了我想知道的树。

最佳答案

如果事情发生在 QML 中并且需要在 C++ 中处理,事实证明在 QML 端处理“连接”是有利的。

基本上,您的 C++ 代码会将一个或多个基于 QObject 的对象公开给 QML,例如通过引擎根上下文的 setContextProperty(),QML 代码会在需要时调用它们的插槽。

主要原因是这不会对我们的 QML 代码强加太多细节,例如某些结构、具有特定名称或信号的某些对象等。 C++ 端提供功能,QML 端在需要时调用它。

关于c++ - 在 Qt 中连接多个信号和槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40038874/

相关文章:

c++ - 使用 memcpy 复制对象数组

c++ - 如何使用 Int 65H 输出字符串?

c++ - 如何为共享内存映射选择固定地址

c++ - 如何使用Qt建立命令窗口?

qt - 在 QML 中动态更改 Material 主题

c++ - 使用 Set Precision C++ 添加小数

c++ - Qt 中的日期时间

qt - 让qmake默认使用qt5

qml - QtQuick2 中的 QFormLayout 等效项?

qt - QML中继器: parent/child vs ownership