Страница 1 из 1

Нет возможности добавить поле.

Добавлено: 16 сен 2009, 15:44
ttestt
Создаю новый векторный слой.
Свойства слоя - Аттрибуты.
Вхожу в режим редактирования.
Кнопки добавить поле и удалить поле - неактивны.
Проверено в квантум версии начиная с 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
которые находятся в core/qgsvectordataprovider.cpp

а там видим

Код: Выделить всё

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;
}
тоесть удаление не работает полюбому
а добавление неизвестно когда :)

имхо

Re: Баг. Нет возможности добавить поле.

Добавлено: 17 сен 2009, 10:43
ttestt
Кстати, для слоев постгис добавление и удаление работает (не просто кнопки включаются, а выполняют свои функции), так что лично для меня проблема персонального контекстного меню на каждом слое все актуальнее (чтобы наладить нужный экспорт в шейпы)

Re: Баг. Нет возможности добавить поле.

Добавлено: 17 сен 2009, 16:38
Максим Дубинин
QgsVectorDataProvider::DeleteAttributes
Это и не будет работать, пока огр не умеет удалять поля.
ttestt писал(а): QgsVectorDataProvider::AddAttributes
А вот это должно работать, что-то с провайдером.

В меню About\providers, пункт 6 у меня
OGR data provider (compiled against GDAL/OGR library version 1.6.1, running against GDAL/OGR library version 1.6.1)

Re: Баг. Нет возможности добавить поле.

Добавлено: 18 сен 2009, 08:24
Voltron
Интересно, в списке рассылки тоже поднималась эта тема
> How? There is no Add Field button in the Table even if you toggle Editing on.

In the (vector) layer properties' attribute tab. If your GDAL/OGR is capable of adding fields the button should be enabled for shapes in editing mode. The delete tab will be disabled in any case for shapes as OGR cannot do that yet
(but there is a patch by Martin Dobias in GDAL's TRAC to enable field deletion).

But given proper database permissions both buttons are enabled for postgis layer.

Re: Баг. Нет возможности добавить поле.

Добавлено: 18 сен 2009, 21:32
param0n
Подтверждаю, не работает, но мне сильно не мешает, пока (Qgis 1.1\1.2\1.3)

Re: Баг. Нет возможности добавить поле.

Добавлено: 19 сен 2009, 01:32
Максим Дубинин
param0n писал(а):Подтверждаю, не работает, но мне сильно не мешает, пока (Qgis 1.1\1.2\1.3)
Версию GDAL\OGR из About забыли написать. Если меньше 1.6, переустанавливайте и всё будет.