qt报错 F:\qt_projects\QtScrcpy\videoform.cpp:131: error: 'onNewFrame' is not a member of 'QList<Decoder*>' connect(m_decoderList,QList<Decoder*>::onNewFrame,this,[this](devicessocket* devicesSocket){ ^~~~~~~~~~
时间: 2023-06-20 21:09:29 浏览: 94
这个错误是因为 QList 没有 onNewFrame 方法。根据你的代码,我猜测你的意图是监听 m_decoderList 中 Decoder 对象的 onNewFrame 信号,然后调用 lambda 表达式中的代码。那么正确的连接方式应该是:
```
connect(m_decoderList, &QList<Decoder*>::objectAdded, this, [this](Decoder* decoder) {
connect(decoder, &Decoder::onNewFrame, this, [this](devicessocket* devicesSocket) {
// TODO: 处理新帧数据
});
});
```
这样,当向 m_decoderList 中添加 Decoder 对象时,就会触发 objectAdded 信号,然后调用连接的 lambda 表达式,然后在 lambda 表达式中连接 Decoder 对象的 onNewFrame 信号。注意,这里需要将 Decoder* 作为参数传递给 lambda 表达式中的代码块,这样才能访问到具体的 Decoder 对象。
相关问题
qt报错 F:\qt_projects\QtScrcpy\videoform.cpp:136: error: 'onNewFrame' is not a member of 'QList<Decoder*>' connect(m_decoderList,QList<Decoder*>::onNewFrame,this,[this](devicessocket* devicesSocket){ ^~~~~~~~~~
这个错误提示说明你在尝试使用一个不存在的 `QList<Decoder*>` 成员函数 `onNewFrame` 进行信号槽连接。可以参考 Qt 文档中 `QList` 类的方法,确认该类是否真的有 `onNewFrame` 方法。
如果是自定义的 `Decoder` 类,你可能需要检查一下该类是否声明了 `onNewFrame` 信号,并且该信号是否符合 Qt 的信号定义规则。如果是 Qt 内置的 `Decoder` 类,你可以查阅相应的文档,看看是否提供了 `onNewFrame` 信号。
另外,根据你的代码片段,你可能需要将连接语句修改为:
```cpp
connect(m_decoderList, &QList<Decoder*>::valueChanged, this, [this](devicessocket* devicesSocket) {
// 处理 onNewFrame 信号的槽函数代码
});
```
这里使用了 `QList` 的 `valueChanged` 信号,该信号会在列表中的值被修改时发出。在槽函数中,你可以添加对 `Decoder` 对象的判断和处理,以实现对 `onNewFrame` 信号的响应。
qt报错 F:\qt_projects\QtScrcpy\videoform.cpp:135: error: 'objectAdded' is not a member of 'QList<Decoder*>' connect(m_decoderList, &QList<Decoder*>::objectAdded, this, [this](Decoder* decoder) { ^~~~~~~~~~~
这个错误提示表明在第135行的connect语句中,QList<Decoder*>没有objectAdded成员。QList是一个容器类,它没有objectAdded信号,所以connect语句无法编译通过。
你需要检查一下connect语句中的QList对象m_decoderList是否正确声明,并确保该对象中包含了你想要连接的信号。如果要连接QList的信号,你需要将其转换为QObject或QVariant类型,然后使用QMetaObject::connectSlotsByName()函数连接信号和槽函数。
另外,你可以考虑使用 QVector、QLinkedList、std::vector 等其他的容器类代替 QList,看看是否能解决这个问题。
阅读全文