including qml file from another folder
-
Hi all -
I've been breaking up a code base into multiple folders/sub-folders, more for organizational clarity than anything. It's all working, except for one file, located at:
<mainFolder>\app\qml\equipment\components\FileA.qml
which is trying to use another file located at:
<mainFolder>\qmlplugins\Nga\Components\DrawerList.qml
with this line:
equipmentDrawerStack.push("DrawerList.qml",
At run time, my app is looking in the first folder (app\qml\equipment\components) and not finding the file.
I realize I can hard-code a relative pathname, but I'd prefer not to do that. Can someone suggest a better method for this?
Thanks....
-
@mzimmers said in including qml file from another folder:
I realize I can hard-code a relative pathname, but I'd prefer not to do that
Why not?
-
@JoeCFD there's a complicating factor here. This is my project structure:
The file to be included is in qmlplugins/Nga/Components. The file trying to include it is in appNgaIcdFw/appNgaIcdFw/qml/equipment/components.All of my other files in appNgaIcdFw can find the files in Nga/Components. For some reason, though, it can't find this new one. The new file is in the CMakeLists.txt file, so it should be treated like all the others.
This is the error I get:
qrc:/qt/qml/NgaIcdFw/qml/equipment/components/DrawerOpener.qml:79:9: QML StackView: push: qrc:/qt/qml/NgaIcdFw/qml/equipment/components/Timepicker.qml:-1 No such file or directory
-
-
@johngod you didn't miscount, though I think you meant:
import "../../../../qmlplugins/Nga/Components"
But I don't think this is necessary. I already have a line:
import Nga.Components
It may be noteworthy that if I directly reference DrawerList from the same file, that works. It's the argument to the push() that seems to need some pathname, though I'd like to avoid having to do this.
-
@mzimmers Are you using a resource file to store your qml files ? I usually do that, then in the in project editor, I expand the resource file, select the qml file I want to use, right click on the file, there is one option to Copy the Path, something like ":/someFolder/SomeFile.qml" and other that is Copy Url, something like "qrc:/someFolder/SomeFile.qml". One of this options should work, dont remember right now which is the correct. Edit: this are relative paths to the qml files inside the resource files, this is a good approach imho, I fail to see why you would not want to use this relative paths.
-
@johngod said in including qml file from another folder:
Are you using a resource file to store your qml files ?
No, I'm not -- that hasn't been necessary so far. If I decide to do this, would it be best to create it at the top project level, so that it covers all the files referenced in the contained CMake files, or should I create it at the /qml/Components level? Or, does it matter?
-
@mzimmers You have to use it at top level, since you cannot add files at a upper level folder, then you can add all the qml files of your projet. Using a resource file for your qml files will make them a part of the excutable file, you will not have to worry about deploy them.
-
@mzimmers I guess it may be better to put shared qml files into a dir like for example: common or general or shared for both project and plugin. I think you may have some base qml files as well for both projects and they may belong to this dir too.
In this way, both projects will use the exactly same path in their own cmake files. -
@JoeCFD My top-level CMakeLists.txt file already has these entries:
add_subdirectory(qmlplugins) add_subdirectory(appNgaIcdFw)
So I think the qmlplugins directory is already doing what you suggested. I think @johngod is correct about me needing a resources file, but I don't know where to place it for it to be visible to everything.
-
@mzimmers Hi
I usually would put my resource in the top level directory ngalcdFwProj, but I think you can also put it in qmlplugins and it still would be visible appNgaIcdFw, give it a try. Note that is this last case, you will only be able to add qml files from the qmlplugins and the sub folders to the resource. Note also that you can add several resource files, for example, one for the qmlplugins folder, other for appNgalcdFw, and so on.