Project

General

Profile

Actions

Support Request #6949

closed

Documentation for Filter Editor qml

Added by hidden almost 5 years ago. Updated over 4 years ago.

Status:
Closed
Priority:
Normal
Customer:
VW
Department:
Requester's Priority:
Normal
Support Level:
3rd Level
Resolution:
Known Problem
Affected Products:
Platform:
Windows 10 64bit
Topic:
ADTF::FilterSDK
FAQ Links:

Description

Supportanfrage

ähnlich wie beim ADTFDAT File Player möchte ich über das Kontextmenü ("Create pins from playback file") eine Datei einlesen und Pins erzeugen. In der Datei "${ADTF_DIR}/bin/adtf_playback_input_filtereditor.qml" finde ich Funktionen wie:

createOutputPin()
listOutputPins()

Wo sehe ich, wie diese verwendet werden und welche Funktionen noch zur Verfügung stehen?

Lösung

Kommt zur 3.7

Fehlerbehebung:

qmlRegisterType<Example>(uri, 1, 0, "Example");

statt
qmlRegisterType<Example>("ExamplePlugin", 1, 0, "Example");

verwendet. Da die Variable "uri" leer war, konnte das Modul "ExamplePlugin" wohl nicht gefunden werden. Das Modul wird jetzt geladen und ich kann die Klasse in der Qml des Filter verwenden.

Files

ExamplePlugin.zip (2.71 KB) ExamplePlugin.zip hidden, 2019-04-29 12:06
ExampleFilter.qml (935 Bytes) ExampleFilter.qml hidden, 2019-04-29 12:19
Actions #1

Updated by hidden almost 5 years ago

  • Status changed from New to In Progress
  • Topic set to ADTF::FilterSDK
Actions #2

Updated by hidden almost 5 years ago

  • Project changed from 20 to Public Support
  • Private changed from Yes to No
  • Resolution set to Known Problem
  • Product Issue Numbers set to https://www.cip.audi.de/jira/browse/ACORE-8895
  • Support Level changed from 2nd Level to 3rd Level

Hallo Matthias,

ja, dazu haben wir ein Ticket (ACORE-8895), hierzu gibt es leider noch keine Doku, wir sind dran.
Wir werden versuchen, dir einen Guide zu schreiben, ich habe das Ticket noch einmal hochpriorisiert.

In der Zwischenzeit zum groben Doing (am Bsp. des Players):

1) In deiner Plugin Description den Filter Editor definieren

<editor_descriptions>
    <editor_description>
        <name>Create pins from playback file</name>
        <url>adtf_playback_input_filtereditor.qml</url>
    </editor_description>
</editor_descriptions>

2) In deiner Plugin Description dynamische Pins konfigurieren

<pin_set_description>
    <pin_descriptions/>
    <binding_object_descriptions/>
    <runner_descriptions/>
    <dynamic_input_pins>false</dynamic_input_pins>
    <dynamic_output_pins>true</dynamic_output_pins>
</pin_set_description>

3) In deinen Filter Editor an sich (QML) brauchst du folgende Basics

import QtQuick 2.7
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
import QtGraphicalEffects 1.0
import QtQuick.Dialogs 1.2

// ...

import EditorPlugin 1.0

EditorPluginBase
{

    // ...

    createOutputPin("mypinname");

    // ...
}

4) Funktionen die du nutzen kannst:

// Inputpins
function findInputPin(name)
function listInputPins()
function createInputPin(name)
function removeInputPin(pin)

// Outputpins
function findOutputPin(name)
function listOutputPins()
function createOutputPin(name)
function removeOutputPin(pin)

// Properties
function findProperty(component, name)
function createProperty(component, name, value)
function setProperty(component, name, value)
function getPropertyValue(component, name)

// Vielleicht hilfreich
function resolveAndGetAbsoluteUrl(path, basePath)
function launch(command, args, workingDirectory)

Vorab-Hinweis: Punkt 1) und 2) wirst du ab ADTF 3.6.0 aus dem Code heraus definieren können

Actions #3

Updated by hidden almost 5 years ago

  • Status changed from In Progress to Customer Feedback Required
Actions #4

Updated by hidden almost 5 years ago

Danke, das hilft weiter. Was ist "component" bei den Property-Funktionen?

Kann ich auch ein CE-Plugin erstellen, damit ich dann über QML auf C++ Klassen zugreifen kann (ähnlich wie hier https://doc.qt.io/qt-5/qtqml-cppintegration-topic.html)?

Actions #5

Updated by hidden almost 5 years ago

Hallo Matthias,

Was ist "component" bei den Property-Funktionen?

Die Plugin-Komponenten, also z.B. ein Filter, Service oder Streaming Source/Sink.
z.B.

import QtQuick 2.7
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
import QtGraphicalEffects 1.0
import QtQuick.Dialogs 1.2

import EditorPlugin 1.0

EditorPluginBase
{
    Dialog
    {
        id: dialog;
        visible: true
        title: "My Filter Editor" 

        standardButtons: StandardButton.Save | StandardButton.Cancel

        Slider
        {
            id: slider
            width: parent.width
            height: 20
            value: 0
            minimumValue: 0
            maximumValue: 100
        }

        Component.onCompleted:
        {
            slider.value = getPropertyValue(targetModel, "test_property");
        }

        onAccepted:
        {
            setProperty(targetModel, "test_property", slider.value)
        }
    }
}

Kann ich auch ein CE-Plugin erstellen, damit ich dann über QML auf C++ Klassen zugreifen kann (ähnlich wie hier https://doc.qt.io/qt-5/qtqml-cppintegration-topic.html)?

Yep, mittels .adtfceplugin.
Schau dir mal den Guide ADTF CE Module an.

Actions #6

Updated by hidden almost 5 years ago

Ich habe mir nun beispielhaft einen Filter und ein CE-Plugin erstellt (siehe Anhang). Hänge ich den Debugger an den Configuration Editor, bekomme ich folgende Fehler:

  • qml: Error to set DialogManager to module :/module/ExamplePlugin/Main.qml: Error: Cannot assign to non-existent property "dialogManager"
    qml: Error to set MainWindow to module :/module/ExamplePlugin/Main.qml: Error: Cannot assign to non-existent property "mainWindow"
  • file:///Path/to/ExampleFilter.qml:9:1: module "ExamplePlugin" is not installed

Wie mache ich nun die Klasse "Example" in der Qml des Filters verfügbar?

Actions #7

Updated by hidden almost 5 years ago

  • Status changed from Customer Feedback Required to In Progress
Actions #8

Updated by hidden almost 5 years ago

Hallo Matthias,

wird das CE_Pluigin nach der Installation auch vom CE geladen? Nur wenn das Plugin nachgeladen wird, kann man den Inhalt auch benutzen --- bzw. nur dann wird der Aufruf von

qmlRegisterType<>();

ausgefuehrt.

In der main.qml wird Example.qml als zusaetzlicher Property-Editor registriert:

PropertyViewConfig.addEditor("Example", "qrc:/module/ExamplePlugin/Example.qml");

Das wuerde fuer ein dynamisches nachladen von Example.qml sorgen, falls eine Property innerhalb eines Filters, Services, etc. exisitert, deren Template vom Typ Example ist und damit dann das Verhalten innerhalb der Property-View des CE anpassen. Wenn das nicht so sein soll, kann der Aufruf einfach aus dem Konstruktor raus.

Man kann einfach testen ob das Plugin geladen wurde indem man ein kleines Rechteck oder etwas aehnliches in das QML-Item packt.

Item {
    Rectangle {
        color: "yellow" 
        x: 10
        y: x
        width: 20
        heigth: width
    }
}

Zusaetzliche CE-Module kann man in den CE-Optionen unter den entsprechenden Suchpfaden bekannt machen. Genau wie bei den regulaeren Plugins.

Actions #9

Updated by hidden almost 5 years ago

  • Status changed from In Progress to Customer Feedback Required
Actions #10

Updated by hidden almost 5 years ago

Hallo Sebastian,

ich hatte

qmlRegisterType<Example>(uri, 1, 0, "Example");

statt
qmlRegisterType<Example>("ExamplePlugin", 1, 0, "Example");

verwendet. Da die Variable "uri" leer war, konnte das Modul "ExamplePlugin" wohl nicht gefunden werden. Das Modul wird jetzt geladen und ich kann die Klasse in der Qml des Filter verwenden.

Besten Dank für die Hinweise!

Actions #11

Updated by hidden almost 5 years ago

  • Status changed from Customer Feedback Required to To Be Closed

Super das es geklappt hat! Ich mache das Ticket zu, wenn es noch Fragen gibt einfach melden.

Actions #12

Updated by hidden over 4 years ago

  • Subject changed from Dokumentation zu qml Funktionen to Documentation for Filter Editor qml
  • Description updated (diff)
  • Status changed from To Be Closed to Closed
Actions

Also available in: Atom PDF