Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. How to embed qml-files etc. in executable file? [solved]
QtWS25 Last Chance

How to embed qml-files etc. in executable file? [solved]

Scheduled Pinned Locked Moved QML and Qt Quick
22 Posts 5 Posters 27.2k Views
  • 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.
  • M Offline
    M Offline
    mbrasser
    wrote on 3 May 2011, 23:53 last edited by
    #4

    I'm not sure, but it may be that setMainQmlFile() is looking for a URL (directly or eventually), and thus needs a qrc scheme (rather than a :/ prefix).

    For reference, the official docs on using QML and resource files together can be found at http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#managing-resource-files-with-the-qt-resource-system

    Regards,
    Michael

    1 Reply Last reply
    0
    • Z Offline
      Z Offline
      ZapB
      wrote on 4 May 2011, 07:43 last edited by
      #5

      In one of my current projects I have:

      @
      <RCC>
      <qresource prefix="/">
      <file>main.qml</file>
      </qresource>
      </RCC>
      @

      Then I set the source on the declarative view with:

      @
      view->setSource( QUrl( "qrc:/main.qml" ) );
      @

      Try wrapping your path in a QUrl and using the qrc:/ scheme rather than the shorthand :/ that I suggested before.

      Nokia Certified Qt Specialist
      Interested in hearing about Qt related work

      1 Reply Last reply
      0
      • H Offline
        H Offline
        Hedge
        wrote on 4 May 2011, 07:52 last edited by
        #6

        Thanks ZapB, that did the trick.
        Now I'm facing another problem though.

        In my main.qml I include the qml desktop-components like this:

        @import "../../desktop-components/components"
        import "../../desktop-components/components/plugin"@

        When the main.qml-file is compiled as a resource these paths don't match anymore.

        How can I fix this?

        1 Reply Last reply
        0
        • Z Offline
          Z Offline
          ZapB
          wrote on 4 May 2011, 08:04 last edited by
          #7

          The problem is that your main qml file is no longer located on the local filesystem, it is part of the virtual qrc:/ filesystem. The docs state that the default locations searched by the declarative engine when trying to import extra qml modules are:

          • The directory of the current file (qrc:/ in this case)
          • The locations specified by QLibraryInfo::ImportsPath
          • Paths specified by the QML_IMPORT_PATH environment variable.

          You can add extra directories to be searched by either:

          • calling "QDeclarativeEngine::addImportPath()":http://doc.qt.nokia.com/latest/qdeclarativeengine.html#addImportPath or
          • adding paths to the QML_IMPORT_PATH environment variable

          I would recommend using the "QDeclarativeEngine::addImportPath()":http://doc.qt.nokia.com/latest/qdeclarativeengine.html#addImportPath option if you wish to force a certain deployment layout for your files.

          Nokia Certified Qt Specialist
          Interested in hearing about Qt related work

          1 Reply Last reply
          0
          • H Offline
            H Offline
            Hedge
            wrote on 4 May 2011, 08:33 last edited by
            #8

            Thanks for clarifying this.

            I'd love to put all stuff of both import-folders in resource-files, but there is no way to add whole folders to a qrc-file or is there?

            1 Reply Last reply
            0
            • Z Offline
              Z Offline
              ZapB
              wrote on 4 May 2011, 08:39 last edited by
              #9

              Sure. Open up the resource file in creator, click the Add->Files... button. In the resulting file dialog navigate to one of the dirs you wish to add. Select all the files in there and click OK. Repeat for the other dir of files.

              My full resource file for the project I was talking about looks like this:
              @
              <RCC>
              <qresource prefix="/">
              <file>main.qml</file>
              <file>Profile.qml</file>
              <file>LineEdit.qml</file>
              <file>Login.qml</file>
              <file>images/clear.png</file>
              <file>images/lineedit-bg-focus.png</file>
              <file>images/lineedit-bg.png</file>
              <file>images/qt-logo.png</file>
              <file>images/qtdn-logo.png</file>
              <file>images/login-button.png</file>
              <file>SimpleButton.qml</file>
              <file>images/login-button-shadow.png</file>
              <file>images/application-exit.png</file>
              <file>RemoteImage.qml</file>
              <file>Photo.qml</file>
              <file>images/box-shadow.png</file>
              <file>SimpleProgressBar.qml</file>
              <file>ProgressSpinner.qml</file>
              </qresource>
              </RCC>
              @
              Note that I have images as well as qml files in there.

              Nokia Certified Qt Specialist
              Interested in hearing about Qt related work

              1 Reply Last reply
              0
              • H Offline
                H Offline
                Hedge
                wrote on 4 May 2011, 08:44 last edited by
                #10

                I guess I can use qrc:/ - URLs for the import-path?

                e.g.
                @import "qrc:/desktop-components/components"@

                Can't test this now.

                1 Reply Last reply
                0
                • Z Offline
                  Z Offline
                  ZapB
                  wrote on 4 May 2011, 08:55 last edited by
                  #11

                  Yes I think that should work once you add the components to your resource file.

                  Nokia Certified Qt Specialist
                  Interested in hearing about Qt related work

                  1 Reply Last reply
                  0
                  • H Offline
                    H Offline
                    Hedge
                    wrote on 4 May 2011, 20:05 last edited by
                    #12

                    Hmm it seems to work but I'm running into a problem.

                    The compiler says:
                    @qrc:/qml/MyProject/main.qml:2:1: module ":.desktop-components.components" plugin "styleplugin" not found @

                    This is qrc-file:

                    @<RCC>
                    <qresource prefix="/">
                    <file>qml/MyProject/main.qml</file>
                    <file>desktop-components/components/Button.qml</file>
                    <file>desktop-components/components/ButtonRow.qml</file>
                    <file>desktop-components/components/CheckBox.qml</file>
                    <file>desktop-components/components/ChoiceList.qml</file>
                    <file>desktop-components/components/components.pro</file>
                    <file>desktop-components/components/ContextMenu.qml</file>
                    <file>desktop-components/components/Dial.qml</file>
                    <file>desktop-components/components/Frame.qml</file>
                    <file>desktop-components/components/GroupBox.qml</file>
                    <file>desktop-components/components/HeaderSection.qml</file>
                    <file>desktop-components/components/Makefile</file>
                    <file>desktop-components/components/ProgressBar.qml</file>
                    <file>desktop-components/components/qmldir</file>
                    <file>desktop-components/components/RadioButton.qml</file>
                    <file>desktop-components/components/ScrollArea.qml</file>
                    <file>desktop-components/components/ScrollBar.qml</file>
                    <file>desktop-components/components/Slider.qml</file>
                    <file>desktop-components/components/SpinBox.qml</file>
                    <file>desktop-components/components/Switch.qml</file>
                    <file>desktop-components/components/Tab.qml</file>
                    <file>desktop-components/components/TabBar.qml</file>
                    <file>desktop-components/components/TabFrame.qml</file>
                    <file>desktop-components/components/TableView.qml</file>
                    <file>desktop-components/components/TextArea.qml</file>
                    <file>desktop-components/components/TextField.qml</file>
                    <file>desktop-components/components/ToolBar.qml</file>
                    <file>desktop-components/components/ToolButton.qml</file>
                    <file>desktop-components/components/plugin/libstyleplugin.a</file>
                    <file>desktop-components/components/plugin/styleplugin.dll</file>
                    </qresource>
                    </RCC>
                    @

                    This is the start of main.qml
                    @import QtQuick 1.0
                    import "qrc:/desktop-components/components"
                    import "qrc:/desktop-components/components/plugin"@

                    1 Reply Last reply
                    0
                    • Z Offline
                      Z Offline
                      ZapB
                      wrote on 4 May 2011, 20:39 last edited by
                      #13

                      Ah, you cannot compile a dll into the resource system. I do not think the library loader supports using the resource system. Also it doesn't really make sense to place a shared library inside the binary as it loses any benefit of being a shared library.

                      I think you'll need to remove your style plugin from the resource system and load that using the method I suggested above with QDeclarativeEngine::addImportPath().

                      Nokia Certified Qt Specialist
                      Interested in hearing about Qt related work

                      1 Reply Last reply
                      0
                      • H Offline
                        H Offline
                        Hedge
                        wrote on 4 May 2011, 20:55 last edited by
                        #14

                        Ah! I almost forget that libraries can't be resources.

                        It works now when styleplugin.dll is inside the .exe-folder.

                        I also placed a copy of styleplugin.dll inside the folder 'plugins' and added the following line in my main-function

                        @QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath() + "/plugins");@

                        but that doesn't work. What could be wrong here? applicationDirPath() returns the correct location.

                        1 Reply Last reply
                        0
                        • Z Offline
                          Z Offline
                          ZapB
                          wrote on 4 May 2011, 21:03 last edited by
                          #15

                          What category of plugin is it?

                          Nokia Certified Qt Specialist
                          Interested in hearing about Qt related work

                          1 Reply Last reply
                          0
                          • H Offline
                            H Offline
                            Hedge
                            wrote on 4 May 2011, 21:06 last edited by
                            #16

                            It's a qml-plugin.

                            1 Reply Last reply
                            0
                            • Z Offline
                              Z Offline
                              ZapB
                              wrote on 4 May 2011, 21:11 last edited by
                              #17

                              In that case I think that you need to use QDeclarativeEngine::addImportPath() as I mentioed earlier rather than addLibraryPath().

                              Nokia Certified Qt Specialist
                              Interested in hearing about Qt related work

                              1 Reply Last reply
                              0
                              • H Offline
                                H Offline
                                Hedge
                                wrote on 4 May 2011, 21:24 last edited by
                                #18

                                OK, but that returns an error (I placed it in the main-function)

                                @QDeclarativeEngine::addImportPath(QCoreApplication::applicationDirPath() + "/plugins");@

                                @error: incomplete type 'QDeclarativeEngine' used in nested name specifier@

                                Adding it to the QmlApplicationViewer doesn't do anything

                                @ QmlApplicationViewer viewer;
                                viewer.addImportPath(QCoreApplication::applicationDirPath() + "/plugins");@

                                Also the QtCreator-editor complains that it can't find both imports:
                                @import "qrc:/desktop-components/components"
                                import "qrc:/desktop-components/components/plugin"@

                                1 Reply Last reply
                                0
                                • D Offline
                                  D Offline
                                  DamianMilo
                                  wrote on 30 Dec 2012, 16:08 last edited by
                                  #19

                                  You set it solved but i can't see solution.. Could you write me solution?

                                  Regards,
                                  Damian Czechowicz
                                  Junior Software Engineer

                                  Milo Solutions
                                  http://milosolutions.com

                                  1 Reply Last reply
                                  0
                                  • N Offline
                                    N Offline
                                    nib952051
                                    wrote on 10 Jan 2013, 16:36 last edited by
                                    #20

                                    I think we can't load library in such way. For me problem solution was in modifying qstyleplugin and build rules. If needed I can share the code.

                                    1 Reply Last reply
                                    0
                                    • D Offline
                                      D Offline
                                      DamianMilo
                                      wrote on 27 Feb 2013, 11:39 last edited by
                                      #21

                                      Could you share code? thanks.

                                      Regards,
                                      Damian Czechowicz
                                      Junior Software Engineer

                                      Milo Solutions
                                      http://milosolutions.com

                                      1 Reply Last reply
                                      0
                                      • N Offline
                                        N Offline
                                        nib952051
                                        wrote on 27 Feb 2013, 12:48 last edited by
                                        #22

                                        "look at cmake branch":https://github.com/nib952051/QtDesktopComponentsBackport/tree/cmake

                                        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