如何在QGIS C API中使用QT信号和插槽
How to use QT signals and slots in QGIS C++ API
我正在使用QGIS 3.6 C API开发独立的QT 5.11.2应用程序。
我已经定义了一个插槽,该插槽旨在消耗currentLayerChanged(QgsMapLayer * layer)
信号。
标题文件中的插槽声明为:
private slots:
void on_CurrentLayer_changed(QgsMapLayer *layer);
插槽定义是:
void MainWindow::on_CurrentLayer_changed(QgsMapLayer * layer)
{
// do something here
}
当我尝试构建时,我会收到一个链接器错误:
moc_mainwindow.obj:-1: error: LNK2019: símbolo externo "public: static struct QMetaObject const QgsMapLayer::staticMetaObject" (?staticMetaObject@QgsMapLayer@@2UQMetaObject@@B) sin resolver al que se hace referencia en la función "int __cdecl qRegisterMetaType<class QgsMapLayer *>(char const *,class QgsMapLayer * *,enum QtPrivate::MetaTypeDefinedHelper<class QgsMapLayer *,1>::DefinedType)" (??$qRegisterMetaType@PEAVQgsMapLayer@@@@YAHPEBDPEAPEAVQgsMapLayer@@W4DefinedType@?$MetaTypeDefinedHelper@PEAVQgsMapLayer@@$00@QtPrivate@@@Z)
File not found: moc_mainwindow.obj
error: LNK1120: 1 externos sin resolver
我是否应该为发射信号currentLayerChanged(QgsMapLayer * layer)
定义插槽的任何类子类吗?
我也有类似的问题。就我而言,我只使用另一个信号插槽结构。我的意思是而不是使用:
connect(sender,&className::signalName,receiver,slotName)
使用此:
connect(sender,SIGNAL(signalName),receiver,SLOT(slotName))
它对我有用。
相关文章:
- Qt 信号/插槽问题
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- C++Qt信号和插槽
- 使用std::move将std::unique_ptr作为qt信号参数传递
- 使用std::bind将Qt信号连接到插槽
- 如果代码中没有连接任何插槽,是否有理由发出Qt信号?
- 文档在哪里说明如果参数不是从末端删除参数,则无法从QT信号插槽连接中删除参数?
- 按钮组上的 Qt 信号未连接
- 通过排队的QT信号插槽连接发送QSHAREDPOINTERS的QVECTOR
- QT信号和插槽无法提供错误消息
- 如何监控Qt信号事件队列深度
- QT信号在虚拟机中不连接
- 为什么事件队列未处理我的QT信号
- 如何在打印机完成打印时从打印机获取Qt信号?
- 这是在Qt信号和插槽中使用参数调用函数的好方法吗?
- 删除 QObject 后 Qt 信号仍在触发
- Qt c++信号槽 - 清除信号所必需的
- 一个类中的QT信号/插槽,但从不同的线程发出
- QT:C 信号到QML连接
- 来自静态方法的QT信号