C++ QGIS c++;插件获取向量层属性

C++ QGIS c++;插件获取向量层属性,c++,qt,qgis,C++,Qt,Qgis,我正在使用QtCreator为QGIS桌面2.8.3(每晚)编写一个插件。我的想法是获取当前项目中的层名称列表,将它们放在一个列表中,每次我单击一个项目时,插件将获取属性表并将其放在一个表小部件中 我想我几乎得到了所有这些,除了在得到所有属性之后,QGIS被甩了 这是我的插件图: mainapp==load=>form1==load=>form2 作为一个插件,mainmodule有一个 qgis接口*mIface 我从mainapp传递到form1,最终通过这样一个公共空白传递到form2

我正在使用QtCreator为QGIS桌面2.8.3(每晚)编写一个插件。我的想法是获取当前项目中的层名称列表,将它们放在一个列表中,每次我单击一个项目时,插件将获取属性表并将其放在一个表小部件中

我想我几乎得到了所有这些,除了在得到所有属性之后,QGIS被甩了

这是我的插件图: mainapp==load=>form1==load=>form2

作为一个插件,mainmodule有一个

qgis接口*mIface
我从mainapp传递到form1,最终通过这样一个公共空白传递到form2

void form1::get_iface(QgisInterface*接口)
{
mIface=接口;
}
然后,每当我在列表视图中单击一个项目时,插件将通过以下方式获得属性:

void form02::获取属性表(QListWidgetItem*item)
{
QString targetname=项目->文本();
QStringList myString;
int-targetindex;
对于(int i=0;ilegendInterface()->layers().count();i++)
{
if(mIface->legendInterface()->layers().at(i)->name()==targetname)
{
targetindex=i;
后藤aab;
}
}
aab:;
QgsMapLayer*abc=mIface->legendInterface()->layers().at(targetindex);
QgsVectorLayer*mypLayer=动态播放(abc);
//获取属性表格式,即列标题
ui->tableWidget->clear();
ui->tableWidget->setColumnCount(mypLayer->pendingFields().count());
ui->tableWidget->setRowCount(mypLayer->pendingFeatureCount());
对于(int i=0;ipendingFields().count();i++)
{
myStringtableWidget->setHorizontalHeaderLabels(myString);
///获取特征数据
如果(mypLayer->featureCount()>0)
{
int fcount=mypLayer->featureCount();
int hcount=mypLayer->pendingFields().count();
for(int p=0;pselect(p);
for(inti=0;iselectedFeatures().at(p).attribute(i).toString());
ui->tableWidget->setItem(p,i,item);
}
mypLayer->取消选择(p);
}
删除mypLayer;
删除abc;
}
}
毕竟,我成功地获得了所需的数据,但随后QGIS崩溃并创建了一个小型转储。 我不确定这样传球和使用mIface是否正确

另外,在另一个插件中,当没有加载层时,我可以从文件中加载层,并使用相同的代码获取属性

< QGIS C++插件上的材料太少了,我对这个还很陌生。