Solved Random "Invalid grouped property access" error
-
How are you assigning icon? Perhaps you have an undefined property somewhere. Post that code if you have it please.
But in the mean time, use something like this:
T.Button { Component.onCompleted: { // check properties here. Nothing should be undefined, unless it's supposed to be. //for each property, do something like : if (!this_property.isUndefined()) { assign value } //elegant pseudocode else { handle undefined value (avoid crash) } //more elegant pseudocode } }
Let me know how this goes.
Cheers
-
@devDawg Thank you for your reply :)
Please checkout the completed minimal project to reproduce this issue:https://drive.google.com/file/d/1XCjSXlXu4SfulP_hwRVwkoDjejdComHV/view?usp=sharing
There's no other property access will raise this error, except for this revision tagged and grouped
icon
property which is defined inQQuickAbstractButton
.
TheComponent.onCompleted()
solution is not very suitable for my requirement because it will override bindings created before component completed. -
Hi @GPBeta
I tried your example, it works without problems on my system (Win10, VS2017, Qt 5.11.0).
The "randomness" of the problem seems not reproducible here?My.Button { text: "My Button" onClicked: { console.debug("T.Button: " + icon.height + ", " + icon.width) } }
gives:
qml: T.Button: 18, 18 qml: T.Button: 18, 18 qml: T.Button: 18, 18 ... qml: T.Button: 18, 18 qml: T.Button: 18, 18 qml: T.Button: 18, 18
No warnings nor errors are produced.
-
Hi @Diracsbracket
The error occurs randomly only on startup, so please try to start it as much as possible, or just removeButton { text: "Qt Button" }
and the program will never start here.
-
@GPBeta
What isMyModule.Templates
? You import it inimports\MyModule\Button.qml
but it's defined nowhere. -
@Diracsbracket
MyModule.Templates
is registered viaqmlRegisterModule("MyModule.Templates", 1, 0);
T.Button
is registered viaqmlRegisterType<MyButtonTemplate>("MyModule.Templates", 1, 0, "Button");
They're both C++ codes inmain.cpp
-
@GPBeta
My bad... should have read your post more carefully...
I have never defined or even used templates before, so I will just watch and learn from this thread... -
@GPBeta
By adding:import QtQuick.Templates 2.2
to your
Button.qml
template file, it seems to work?import QtQuick 2.11 import QtQuick.Templates 2.2 import MyModule.Templates 1.0 as T
Apparently, without it, the required
QQuickIcon
type fromqtquickcontrols2/src/quicktemplates2/qquickicon_p.h
does not get registered, hence the errors you get?
-
@Diracsbracket Great! It works perfectly now!
The
QQuickIcon
is registered in theQtQuick.Templates
qml plug-in(qtquicktemplates2plugin.dll
), while my C++ module only linked againstQt5QuickTemplates2.dll
.So if we don't import that module explicitly, the icon property may be randomly registered later than the binding access.
I also tried to add
depends QtQuick.Templates 2.4
in theqmldir
but with no luck.Whatever, I believe this is the best solution for me, thank you so much :)
-
@GPBeta
Thank you for the explanation. Now the randomness makes sense.
Btw. I just checked your webpage. It's quite awesome! -
@Diracsbracket lol, thank you :P