Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt Creator and other tools
  4. Creator Design mode doesn't show the QML components coming from a plugin
Forum Updated to NodeBB v4.3 + New Features

Creator Design mode doesn't show the QML components coming from a plugin

Scheduled Pinned Locked Moved Qt Creator and other tools
12 Posts 5 Posters 12.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • X Offline
    X Offline
    X-Krys
    wrote on last edited by
    #1

    Hi,

    I built a qml plugin where I created a Image.qml file that just extends the original Image qml component.

    My Image.qml:

    @
    import QtQuick 1.0

    Image {
    id:root

    }
    @

    The issue I have is that it doesn't show up in the Design mode when I use it.

    my test file :

    @import QtQuick 1.0
    import com.mpsa.components 2.0

    Rectangle {
    width: 400
    height: 400

    Image {
        source: "picto.png"
    }
    

    }
    @

    In the design mode I just get a full white preview....

    But if I comment the "import com.mpsa.components 2.0" line it will the Image from QtQuick and will appear in the Designer.

    So is there something special to do to get components from a qml plugin appear in the design mode ?

    1 Reply Last reply
    0
    • A Offline
      A Offline
      alexander.merkel
      wrote on last edited by
      #2

      I have the same problem and it is a little discouraging to see that there does not seem to be a solution. Does anyone know how the Design mode really works and how it resolves its imports.

      The problem does not seem to exist when you import something from Qt like QtQuick.Controls 1.0. Somehow one must be able to tell Design mode additional imports. Does it take a QtCreator plugin to accomplish this?

      Thanks

      1 Reply Last reply
      0
      • T Offline
        T Offline
        ThomasHartmann
        wrote on last edited by
        #3

        Qt Quick Designer uses an external process called qml(2)puppet for the rendering. In the latest SDK we ship qml(2)puppet as part of Qt and use those.

        This is why rendering QtQuick.Controls works even though they are not shipped together with Qt Creator. Qt Creator might even be build with Qt 4.

        The Qt Quick Designer uses the QML code model to resolve imports, so the QML code model has to "know" the plugin. There is a tool called qmlplugindump for this.

        For the rendering to work, the Qt currently configured for the project, has to know about the plugin and has to have a qml(2)puppet.

        The safest way is to install the plugin for your import in your Qt like we do it for e.g. QtQuick.Controls.

        Setting QML_IMPORT_PATH is another option. Also .pro and .qmlproject files support setting additional import paths for QML.

        The qml(2)puppet is usually build in release mode, so you also have to make sure you plugin has a release version.

        If your plugin is a pure QML plugin (no C++) just setting the correct import path in the .pro or .qmlproject file works.

        1 Reply Last reply
        0
        • A Offline
          A Offline
          alexander.merkel
          wrote on last edited by
          #4

          Thank you for your help

          It took me a while to implement your suggestions, but that was mostly due to not getting plugins to work at all.

          One problem arose because I have a declarative project that has a main method where I use an Instance of a class that inherits from QDeclarativeView which then loads my qml files.

          In this case the QML_IMPORT_PATH does not do any good. Neither the IDE nor the actual running programm knows about my plugin.

          but:

          @view.rootContext()->engine()->addImportPath("c:/.../importPath");@
          (view is a QDeclarativeView)

          is doing the trick at least for the running program. But not for the design mode. If I try to import it somewhere in a .qmlproject based project, the design mode works perfectly.

          By the way importing a module like QtTest results in components not being displayed as well. So I think i am missing something fundamental.

          1 Reply Last reply
          0
          • strahlexS Offline
            strahlexS Offline
            strahlex
            wrote on last edited by
            #5

            I have exactly the same problem. I played around with qmldump and co and it was not able to get my components into the Qt Designer. Can you please take a look at my code to figure out what I am doing wrong? Btw. I also copy the plugins inside the Qt folder and they are recognized by Qt Creator (just not showing up in Qt Designer). I studied the code from QtQuick.Controls but was able to find out what it does differently.

            What I actually try to achieve is to get a entry in Qt Designer with a custom name e.g. Machinekit - Controls.

            Feel free to check out my website machinekoder.com
            and my pet projects Intellicute and QtQuickVcp

            1 Reply Last reply
            0
            • F Offline
              F Offline
              Frime
              wrote on last edited by
              #6

              Yep, same problems here, too.

              1. What is necessary to preview own QtQuick controls at design time in QtQuick Designer? If I define a QML Control, eg. Control.qml, then I can drag and drop it in QtQuick Designer to the canvas. But there is no preview rendering available. In my case, Control.qml uses a QMLCanvas to render complex painter code. But very simple controls doesn't have a preview too..

              -> Is it necessary to wrap my controls in a plugin, even they only consists of one QML File without any C++ extensions?

              1. Is there a way to provide a kind of "design-time" implementation for each control, which is used by QtQuick designer to render the preview?

              Thank you very much in advance!
              Frime

              1 Reply Last reply
              0
              • T Offline
                T Offline
                ThomasHartmann
                wrote on last edited by
                #7

                There is a small test case that shows how to integrate a pure qml plugin in the designer and adding the items to the item library:

                "Example":https://qt.gitorious.org/qt-creator/qt-creator/source/2adc5c5dc63835644912e403690c230739c27316:tests/manual/qml/testprojects/plugins

                bq. Is there a way to provide a kind of “design-time” implementation for each control, which is used by QtQuick designer to render the preview?

                This is something we plan to do. My current workaround would be to provide a .qmlproject file with a different import path for the mockup plugins.

                1 Reply Last reply
                0
                • F Offline
                  F Offline
                  Frime
                  wrote on last edited by
                  #8

                  Thank you very much! That helped me a lot :)

                  1 Reply Last reply
                  0
                  • F Offline
                    F Offline
                    Frime
                    wrote on last edited by
                    #9

                    Hi again!

                    I tried two different QtCreator versions, 3.2.2 and 2.8.1 .. The older one is able to render the preview, but doesn't show the specifics. The newer one shows the specifics, but does not render the preview. It shows only a white rectangle..

                    My problem: i need both /:

                    -The control uses a QML SceneGraph c++ extension plugin for rendering. The older QtCreator has no problems with that...

                    -The module folder is located in <Qt>/gcc/qml/

                    -Compiling and running works fine with all permutations of Qts and Creators.

                    First thought: The newer QtCreator is based on Qt. 5.3.2 .. So I recompiled my extensions with that Qt version and made a module copy in the appropriate Qt folder. With no success..

                    So.. Does anybody has an idea what's going wrong here? Or did I encounter a regression?

                    Thank you very much in advance!

                    All the best,
                    Frime

                    1 Reply Last reply
                    0
                    • T Offline
                      T Offline
                      ThomasHartmann
                      wrote on last edited by
                      #10

                      Hi,

                      can you check this option for Qt Quick Designer:
                      Always use the QML emulation layer provided by Qt Creator

                      To run C++ plugins you have to make sure to use a qml2puppet build with the correct Qt version:
                      http://doc-snapshot.qt-project.org/qtcreator-3.3/creator-qml-modules-with-plugins.html

                      1 Reply Last reply
                      0
                      • F Offline
                        F Offline
                        Frime
                        wrote on last edited by
                        #11

                        Yep, it works now.

                        I unchecked "Always use the QML emulation layer provided by Qt Creator". After that, QtDesigner built a new and working qml2puppet layer. Thank you very much, again!

                        Greetings to Berlin,
                        Frime

                        1 Reply Last reply
                        0
                        • F Offline
                          F Offline
                          Frime
                          wrote on last edited by
                          #12

                          Yep, it works now.

                          I unchecked "Always use the QML emulation layer provided by Qt Creator". After that, QtDesigner built a new and working qml2puppet layer. Thank you very much, again!

                          Greetings to Berlin,
                          Frime

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved