Свойства слоя - Аттрибуты.
Вхожу в режим редактирования.
Кнопки добавить поле и удалить поле - неактивны.
Проверено в квантум версии начиная с 1.2, до 1.4 от 15 числа установленной из svn (с исходников)
ubuntu 9.04
обновлено. господин trapanator с англоязычного irc подтвердил баг, но весьма странно подтвердил
у него не работает удаление поля, а работает добавление.
<trapanator> I am not able to reproduce your bug
<trapanator> I can add field
<trapanator> stop !
<trapanator> i can add, but not remove
<trapanator> ttestt: I've compiled latest SVN
<trapanator> and I can only add, not remove fields
<trapanator> time to file a bug...
и он же любезно добавил баг.
tracfeed: Ticket #1934 (bug created): Unable to remove shapefile field in Attribute table <https://trac.osgeo.org/qgis/ticket/1934>
я думаю что нашел это место в сорцах. это файл app/qgsvectorlayerproperties.cpp
часть QgsVectorLayerProperties::UpdateButtons
Код: Выделить всё
void QgsVectorLayerProperties::updateButtons()
{
if ( layer->isEditable() )
{
int cap = layer->dataProvider()->capabilities();
mAddAttributeButton->setEnabled( cap & QgsVectorDataProvider::AddAttributes );
mDeleteAttributeButton->setEnabled( cap & QgsVectorDataProvider::DeleteAttributes );
mToggleEditingButton->setChecked( true );
}
else
{
mAddAttributeButton->setEnabled( false );
mDeleteAttributeButton->setEnabled( false );
mToggleEditingButton->setChecked( false );
}
}
Код: Выделить всё
mAddAttributeButton->setEnabled( cap & QgsVectorDataProvider::AddAttributes );
mDeleteAttributeButton->setEnabled( cap & QgsVectorDataProvider::DeleteAttributes );
если заменить их на
Код: Выделить всё
mAddAttributeButton->setEnabled( cap != 0 );
mDeleteAttributeButton->setEnabled( cap != 0 );
тоесть дело в
Код: Выделить всё
QgsVectorDataProvider::AddAttributes
QgsVectorDataProvider::DeleteAttributes
а там видим
Код: Выделить всё
bool QgsVectorDataProvider::addAttributes( const QList<QgsField> & attributes )
{
return false;
}
bool QgsVectorDataProvider::addAttributes( const QMap<QString, QString> &attributes )
{
const QMap<QString, QVariant::Type> &map = supportedNativeTypes();
QList< QgsField > list;
for ( QMap<QString, QString>::const_iterator it = attributes.constBegin(); it != attributes.constEnd(); it++ )
{
if ( !map.contains( it.value() ) )
return false;
list << QgsField( it.key(), map[ it.value()], it.value() );
}
return addAttributes( list );
}
bool QgsVectorDataProvider::deleteAttributes( const QgsAttributeIds& attributes )
{
return false;
}
а добавление неизвестно когда
имхо