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

Здесь нужно сообщать об ошибках в QGIS, с подробным описанием шагов и версии ПО.
Ответить
ttestt
Участник
Сообщения: 82
Зарегистрирован: 22 сен 2008, 20:41
Репутация: 1

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

Сообщение ttestt » 16 сен 2009, 15:44

Создаю новый векторный слой.
Свойства слоя - Аттрибуты.
Вхожу в режим редактирования.
Кнопки добавить поле и удалить поле - неактивны.
Проверено в квантум версии начиная с 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;
}
тоесть удаление не работает полюбому
а добавление неизвестно когда :)

имхо

ttestt
Участник
Сообщения: 82
Зарегистрирован: 22 сен 2008, 20:41
Репутация: 1

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

Сообщение ttestt » 17 сен 2009, 10:43

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

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

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)
пристегивайтесь, турбулентность прямо по курсу

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

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

Сообщение Voltron » 18 сен 2009, 08:24

Интересно, в списке рассылки тоже поднималась эта тема
> 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.

param0n
Участник
Сообщения: 64
Зарегистрирован: 14 июн 2009, 15:34
Репутация: 0

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

Сообщение param0n » 18 сен 2009, 21:32

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

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

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

Сообщение Максим Дубинин » 19 сен 2009, 01:32

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

Ответить

Вернуться в «Ошибки QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 29 гостей