在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
。
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();
}
相关文章:
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- Qt moveToThread,带有参数的信号/插槽
- moc 文件中缺少信号插槽
- 文档在哪里说明如果参数不是从末端删除参数,则无法从QT信号插槽连接中删除参数?
- 信号/插槽多线程 Qt
- 通过排队的QT信号插槽连接发送QSHAREDPOINTERS的QVECTOR
- Qimage没有通过信号插槽QT
- 使用 Qt5 的新信号/插槽实现向滑块发出信号
- 一个类中的QT信号/插槽,但从不同的线程发出
- 信号/插槽基类多继承
- 在QT C 中使用QMOVIE和信号/插槽之间在GIF中导航
- 在 for 循环中使用 lambda 函数连接信号插槽
- 不同类别的 2 个对象之间的信号/插槽
- 如何正确使用qt的信号/插槽系统
- Qt信号插槽视觉工作室:似乎未连接
- QACTION信号插槽中的无形UI
- Qt-连接触发动作中的信号/插槽
- Qt 信号插槽类范围类型
- 信号/插槽 Qt5 C++