繁体   English   中英

在Qt中连接多个信号和插槽

[英]Connecting multiple signals and slots in Qt

我正在自学如何使用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方面则在需要时调用它。

您可以创建一个扩展QQuickView的类MyCustomQQuickView

在构造函数中,设置QML文件:

setSource(QUrl(QStringLiteral("qrc:/main.qml")))

然后,您有一个方法QQuickView::rootObject()可以访问QML根对象,因此您可以连接所有信号。

您的主类代码如下所示:

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

    MyCustomQQuickView view;
    view.show();

    return app.exec();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM