如何在QGIS C++ API中使用QT信号和槽位?

问题描述 投票:0回答:1

我正在使用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) 来定义插槽?

c++ qt qgis
1个回答
0
投票

我有一个类似的问题。在我的例子中,我只是使用另一个信号槽结构。我的意思是代替使用

connect(sender,&className::signalName,receiver,slotName)

用这个:

connect(sender,SIGNAL(signalName),receiver,SLOT(slotName))

这对我很有效

© www.soinside.com 2019 - 2024. All rights reserved.