8 votos

Widget de las relaciones de QGIS en forma personalizada

Acabo de empezar a explorar QGIS relaciones opción, ahora en la versión de QGIS 2.2, aquí los detalles: http://blog.vitu.ch/10112013-1201/qgis-relations Esta es una gran aplicación de algo que he estado tratando de organizar manualmente por un tiempo ahora. Ahora, me pregunto cómo integrar las relaciones de control en un formulario personalizado (en la actualidad, se agrega automáticamente sólo si utiliza la función de formulario). Soy nuevo en PyQt Diseñador, así que no estoy seguro de por dónde empezar.

Gracias de antemano.

10voto

Michael Puntos 11

En el diseñador de Qt:

  1. Crear un nuevo QWidget
  2. Agregar una propiedad personalizada y asígnele el nombreqgisRelation
  3. Establecer el valor de la nueva qgisRelation -propiedad para la id de la relación.

Adding a custom property in Qt Designer

7voto

Arno N. Uehm Puntos 21

El uso de un formulario personalizado diseñado usando Qt designer.

Completed form and sub form

(He tenido éxito haciendo esto en QGIS 2.6 en Windows, pero mi Linux versión de QGIS se bloquea. Estoy escribiendo esto después de haber trabajado las cosas por primera vez, por lo que esta respuesta puede beneficiarse de las correcciones).

Usted debe tener la relación de configurar en las propiedades del proyecto. Elija las relaciones sub-menú y agregar una relación. La 'referencia de la capa de' el niño/'muchos' lado de la uno-a-muchos - de la relación y la 'referencia de campo' es el campo en la tabla que tiene los valores coincidentes en los padres/'uno' lado de la relación. La referencia de la capa/de campo entradas se refieren a los padres/'uno' lado de la relación.

Antes de cerrar este diálogo tenga en cuenta que el cuadro de abajo le permite definir su propio nombre para la relación. Ello, y copiar el nombre exactamente para más tarde.
Image of relationship dialogue

Si usted ha dejado de QGIS dará automáticamente la relación de un nombre he encontrado que es difícil de copiar el nombre (que es muy largo) porque no hay ninguna manera obvia para seleccionarlo.

A menos que usted ya conoce su camino alrededor de Qt Designer, considere la posibilidad de comenzar con la QT archivo de la oferta en el final de esta respuesta: colocar el código en un editor de texto y guardarlo con un nombre apropiado con el fin ".interfaz de usuario" (por ejemplo, Miformulario.interfaz de usuario).

Usted puede editar el formulario en el Diseñador de Qt (probablemente descargado con QGIS) - pero es probablemente vale la pena hacer las siguientes modificaciones en el editor de texto de primero:

Cambie la línea

<string notr="true">LocToInspRelnID</string>

de modo que "LocToInspRelnID" se reemplaza con cualquier IDENTIFICADOR que configurar para la relación.

Modificar la línea:

  <widget class="QLineEdit" name="LocationID">

De modo que "LocationID" se refiere a un campo apropiado en su tabla principal (esto no tiene ninguna función más allá de mostrar los datos en el formulario).

Hay dos modos para la sub-formulario (mostrar datos de el niño/lado "varios" de la relación). Se pueden mostrar los datos en una sencilla tabla que muestra todos los datos a la vez, o con su propia forma para cada entrada. Salir de la siguiente en el código si desea que los datos que se muestran en la simple forma de tabla - eliminar de otra manera.

   <property name="viewMode">
    <enum>QgsDualView::AttributeTable</enum>
   </property> 

Hay etiquetas en el formulario que se desea cambiar, ya sea ahora o más adelante:

   <string>Location inspections</string>

Ahora, con este archivo guardado (con o sin más modificaciones, con o sin el uso de Qt Designer), y de nuevo en QGIS, vaya al padre de la capa de propiedades y establecer el Atributo de diseño del editor de' desplegable 'Proporcionar la interfaz de usuario archivo" y en la Edición de la interfaz de usuario campo poner la ruta a la nueva forma.

Attribute form window image

Ahora asegurarse de que en QGIS tiene el padre de la capa seleccionada, y con la herramienta identificar haga clic en un objeto apropiado. Usted debe ver a su forma. (Usted puede necesitar tener el "auto de forma abierta' seleccionado para asegurarse de que se abre sin más ratón haciendo clic en:

Auto open image

Por último - tome nota, puede utilizar Qt Designer para crear un formulario personalizado para mostrar los datos en su segunda tabla (el niño/lado "varios" de la relación). Esto será mucho más sencillo formulario de toma de datos sólo a partir de la tabla. En las propiedades de la capa conjunto de QGIS para utilizar este formulario para esta capa. Este formulario personalizado ahora aparecen también como sub-formulario cuando la inspección de la matriz de datos.

Código para el formulario de la siguiente manera:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>745</width>
    <height>389</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <widget class="QLineEdit" name="LocationID">
   <property name="geometry">
    <rect>
     <x>290</x>
     <y>10</y>
     <width>113</width>
     <height>27</height>
    </rect>
   </property>
  </widget>
  <widget class="QgsRelationEditorWidget" name="mRelationEditor">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>50</y>
     <width>741</width>
     <height>291</height>
    </rect>
   </property>
   <property name="qgisRelation">
    <string notr="true">LocToInspRelnID</string>
   </property>
   <property name="viewMode">
    <enum>QgsDualView::AttributeTable</enum>
   </property>
  </widget>
  <widget class="QLabel" name="label">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>10</y>
     <width>201</width>
     <height>21</height>
    </rect>
   </property>
   <property name="font">
    <font>
     <family>Noto Sans [unknown]</family>
     <pointsize>14</pointsize>
    </font>
   </property>
   <property name="text">
    <string>Location inspections</string>
   </property>
  </widget>
  <widget class="QLabel" name="label_2">
   <property name="geometry">
    <rect>
     <x>240</x>
     <y>10</y>
     <width>56</width>
     <height>17</height>
    </rect>
   </property>
   <property name="text">
    <string>Location:</string>
   </property>
  </widget>
  <widget class="QLabel" name="label_3">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>30</y>
     <width>71</width>
     <height>16</height>
    </rect>
   </property>
   <property name="text">
    <string>Inspections:</string>
   </property>
  </widget>
 </widget>
 <customwidgets>
  <customwidget>
   <class>QgsCollapsibleGroupBox</class>
   <extends>QGroupBox</extends>
   <header>qgscollapsiblegroupbox.h</header>
   <container>1</container>
  </customwidget>
  <customwidget>
   <class>QgsRelationEditorWidget</class>
   <extends>QgsCollapsibleGroupBox</extends>
   <header>qgsrelationeditorwidget.h</header>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X