6#include <private/qqmlexpression_p.h>
7#include <private/qqmlproperty_p.h>
8#include <private/qqmlboundsignal_p.h>
10#include <private/qqmlcontext_p.h>
11#include <private/qqmlvmemetaobject_p.h>
14#include <QtCore/qloggingcategory.h>
15#include <QtCore/qdebug.h>
16#include <QtCore/qstringlist.h>
18#include <private/qobject_p.h>
31 bool targetSet =
false;
32 bool ignoreUnknownSignals =
false;
33 bool componentcomplete =
true;
120 return d->targetSet ?
d->target.data() :
parent();
136 if (
d->targetSet &&
d->target ==
obj)
142 if (
s->isNotifying())
147 d->boundsignals.clear();
176 s->setEnabled(
d->enabled);
178 emit enabledChanged();
193 return d->ignoreUnknownSignals;
199 d->ignoreUnknownSignals = ignore;
204 for (
int ii = 0; ii <
props.size(); ++ii) {
208 const bool thirdCharacterIsValid = (propName.
size() >= 2)
209 && (propName.
at(2).
isUpper() || propName.
at(2) == u
'_');
211 error(
props.at(ii), QQmlConnections::tr(
"Cannot assign to non-existent property \"%1\"").arg(propName));
220 if (!compilationUnit->stringAt(
target->inheritedTypeNameIndex).isEmpty())
221 error(binding, QQmlConnections::tr(
"Connections: nested objects not allowed"));
223 error(binding, QQmlConnections::tr(
"Connections: syntax error"));
227 error(binding, QQmlConnections::tr(
"Connections: script expected"));
237 p->bindings = bindings;
240void QQmlConnections::connectSignals()
243 if (!
d->componentcomplete || (
d->targetSet && !
target()))
246 if (
d->bindings.isEmpty()) {
247 connectSignalsToMethods();
249 if (lcQmlConnections().isWarningEnabled()) {
250 qmlWarning(
this) <<
tr(
"Implicitly defined onFoo properties in Connections are deprecated. "
251 "Use this syntax instead: function onFoo(<arguments>) { ... }");
253 connectSignalsToBindings();
257void QQmlConnections::connectSignalsToMethods()
284 signal->setEnabled(
d->enabled);
300 signal->takeExpression(expression);
302 }
else if (!
d->ignoreUnknownSignals
305 qmlWarning(
this) <<
tr(
"Detected function \"%1\" in Connections element. "
306 "This is probably intended to be a signal handler but no "
307 "signal of the target matches the name.").arg(propName);
313void QQmlConnections::connectSignalsToBindings()
322 QString propName =
d->compilationUnit->stringAt(binding->propertyNameIndex);
329 signal->setEnabled(
d->enabled);
331 auto f =
d->compilationUnit->runtimeFunctions[binding->value.compiledScriptIndex];
335 signal->takeExpression(expression);
338 if (!
d->ignoreUnknownSignals)
339 qmlWarning(
this) <<
tr(
"Cannot assign to non-existent property \"%1\"").arg(propName);
347 d->componentcomplete=
false;
353 d->componentcomplete=
true;
359#include "moc_qqmlconnections_p.cpp"
constexpr bool isUpper() const noexcept
Returns true if the character is an uppercase letter, for example category() is Letter_Uppercase.
QV4::ExecutionEngine * handle() const
static QObjectPrivate * get(QObject *o)
QObject * parent() const
Returns a pointer to the parent object.
void deleteLater()
\threadsafe
QQmlBoundSignalDeleter(QQmlBoundSignal *signal)
~QQmlBoundSignalDeleter()
void applyBindings(QObject *object, const QQmlRefPointer< QV4::ExecutableCompilationUnit > &compilationUnit, const QList< const QV4::CompiledData::Binding * > &bindings) override
void verifyBindings(const QQmlRefPointer< QV4::ExecutableCompilationUnit > &compilationUnit, const QList< const QV4::CompiledData::Binding * > &props) override
QList< QQmlBoundSignal * > boundsignals
QQmlRefPointer< QV4::ExecutableCompilationUnit > compilationUnit
QList< const QV4::CompiledData::Binding * > bindings
QQmlGuard< QObject > target
bool ignoreUnknownSignals
bool isEnabled() const
\qmlproperty bool QtQml::Connections::enabled
void setEnabled(bool enabled)
void setTarget(QObject *)
void componentComplete() override
Invoked after the root component that caused this instantiation has completed construction.
void setIgnoreUnknownSignals(bool ignore)
void classBegin() override
Invoked after class creation, but before any properties have been set.
QQmlConnections(QObject *parent=nullptr)
QQmlEngine * engine() const
QQmlPropertyCache::ConstPtr propertyCache
QQmlContextData * context
static QQmlData * get(QObjectPrivate *priv, bool create)
QQmlContextData * outerContext
bool isVMEFunction() const
QString name(QObject *) const
static QQmlPropertyPrivate * get(const QQmlProperty &p)
The QQmlProperty class abstracts accessing properties on objects created from QML.
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool startsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string starts with s; otherwise returns false.
qsizetype size() const
Returns the number of characters in this string.
const QChar at(qsizetype i) const
Returns the character at the given index position in the string.
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
#define Q_LOGGING_CATEGORY(name,...)
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLenum GLuint GLsizei const GLenum * props
QQmlEngine * qmlEngine(const QObject *obj)
Q_QML_EXPORT QQmlInfo qmlWarning(const QObject *me)
quint32_le propertyNameIndex
union QV4::CompiledData::Binding::@543 value
Function * function() const
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent