diff options
author | Topi Reinio <topi.reinio@qt.io> | 2020-02-14 11:14:27 +0100 |
---|---|---|
committer | Topi Reinio <topi.reinio@qt.io> | 2020-03-06 10:40:11 +0100 |
commit | fffed819ca8efeee79698aae07b27741f004f7e2 (patch) | |
tree | 4ef0dc1840dc3e18bb0f2f969dfefbc77c5ae6cf | |
parent | dc8598ab1e441d9b49a3aac1e3812bf93f8a3211 (diff) | |
download | qttools-fffed819ca8efeee79698aae07b27741f004f7e2.tar.gz |
qdoc: Refactor automatic note generation for function nodes
Function nodes may have a number of automatically generated notes
added to the documentation; as they share the same formatting,
collect them into a single virtual function in Generator, and
override it in DocBookGenerator.
Call the virtual function in Generator::generateBody() after
generating the text for the Doc instance. As we append the
notes to the body, the order in which the notes appear
may change slightly (if a function comment generates multiple
notes).
Add \note commands in the tests in preparation for a follow-up
commit that utilizes the refactored code.
Task-number: QTBUG-37355
Change-Id: Id92926e53b61e03a2d2feceda70987191b708975
Reviewed-by: Topi Reiniƶ <topi.reinio@qt.io>
-rw-r--r-- | src/qdoc/docbookgenerator.cpp | 141 | ||||
-rw-r--r-- | src/qdoc/docbookgenerator.h | 4 | ||||
-rw-r--r-- | src/qdoc/generator.cpp | 119 | ||||
-rw-r--r-- | src/qdoc/generator.h | 4 | ||||
-rw-r--r-- | src/qdoc/htmlgenerator.cpp | 55 | ||||
-rw-r--r-- | src/qdoc/htmlgenerator.h | 1 | ||||
-rw-r--r-- | tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-type.xml | 6 | ||||
-rw-r--r-- | tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html | 2 | ||||
-rw-r--r-- | tests/auto/qdoc/generatedoutput/testdata/qml/type.cpp | 4 |
9 files changed, 167 insertions, 169 deletions
diff --git a/src/qdoc/docbookgenerator.cpp b/src/qdoc/docbookgenerator.cpp index 5f8d961f8..e8cc2c859 100644 --- a/src/qdoc/docbookgenerator.cpp +++ b/src/qdoc/docbookgenerator.cpp @@ -2076,27 +2076,28 @@ bool DocBookGenerator::generateThreadSafeness(const Node *node) void DocBookGenerator::generateBody(const Node *node) { // From Generator::generateBody, without warnings. + const FunctionNode *fn = node->isFunction() ? static_cast<const FunctionNode *>(node) : nullptr; + if (!node->hasDoc() && !node->hasSharedDoc()) { /* Test for special function, like a destructor or copy constructor, that has no documentation. */ - if (node->nodeType() == Node::Function) { - const auto func = static_cast<const FunctionNode *>(node); + if (fn) { QString t; - if (func->isDtor()) { - t = "Destroys the instance of " + func->parent()->name() + "."; - if (func->isVirtual()) + if (fn->isDtor()) { + t = "Destroys the instance of " + fn->parent()->name() + "."; + if (fn->isVirtual()) t += " The destructor is virtual."; - } else if (func->isCtor()) { - t = "Default constructs an instance of " + func->parent()->name() + "."; - } else if (func->isCCtor()) { + } else if (fn->isCtor()) { + t = "Default constructs an instance of " + fn->parent()->name() + "."; + } else if (fn->isCCtor()) { t = "Copy constructor."; - } else if (func->isMCtor()) { + } else if (fn->isMCtor()) { t = "Move-copy constructor."; - } else if (func->isCAssign()) { + } else if (fn->isCAssign()) { t = "Copy-assignment constructor."; - } else if (func->isMAssign()) { + } else if (fn->isMAssign()) { t = "Move-assignment constructor."; } @@ -2104,10 +2105,9 @@ void DocBookGenerator::generateBody(const Node *node) writer->writeTextElement(dbNamespace, "para", t); } } else if (!node->isSharingComment()) { - if (node->nodeType() == Node::Function) { - const auto func = static_cast<const FunctionNode *>(node); - if (!func->overridesThis().isEmpty()) - generateReimplementsClause(func); + if (fn) { + if (!fn->overridesThis().isEmpty()) + generateReimplementsClause(fn); } if (!generateText(node->doc().body(), node)) { @@ -2115,6 +2115,15 @@ void DocBookGenerator::generateBody(const Node *node) return; } + if (fn) { + if (fn->isPrivateSignal()) + generateAddendum(node, PrivateSignal); + if (fn->isInvokable()) + generateAddendum(node, Invokable); + if (fn->hasAssociatedProperties()) + generateAddendum(node, AssociatedProperties); + } + // Warning generation skipped with respect to Generator::generateBody. } @@ -3393,83 +3402,70 @@ void DocBookGenerator::generateOverloadedSignal(const Node *node) } /*! - Generates a bold line that explains that this is a private signal, - only made public to let users pass it to connect(). - */ -void DocBookGenerator::generatePrivateSignalNote() -{ - // From Generator::generatePrivateSignalNote. - writer->writeStartElement(dbNamespace, "note"); - newLine(); - writer->writeTextElement(dbNamespace, "para", - "This is a private signal. It can be used in signal connections but " - "cannot be emitted by the user."); - writer->writeEndElement(); // note - newLine(); -} - -/*! - Generates a bold line that says: - "This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE." - */ -void DocBookGenerator::generateInvokableNote(const Node *node) + Generates an addendum note of type \a type for \a node. \a marker + is unused in this generator. +*/ +void DocBookGenerator::generateAddendum(const Node *node, Addendum type, CodeMarker *marker) { - // From Generator::generateInvokableNote. + Q_UNUSED(marker); + Q_ASSERT(node && !node->name().isEmpty()); writer->writeStartElement(dbNamespace, "note"); newLine(); - writer->writeStartElement(dbNamespace, "para"); - writer->writeCharacters( + switch (type) { + case Invokable: + writer->writeStartElement(dbNamespace, "para"); + writer->writeCharacters( "This function can be invoked via the meta-object system and from QML. See "); - generateSimpleLink(node->url(), "Q_INVOKABLE"); - writer->writeCharacters("."); - writer->writeEndElement(); // para - newLine(); - writer->writeEndElement(); // note - newLine(); -} - -/*! - Generates bold Note lines that explain how function \a fn - is associated with each of its associated properties. - */ -void DocBookGenerator::generateAssociatedPropertyNotes(const FunctionNode *fn) -{ - // From HtmlGenerator::generateAssociatedPropertyNotes. - if (fn->hasAssociatedProperties()) { - writer->writeStartElement(dbNamespace, "note"); + generateSimpleLink(node->url(), "Q_INVOKABLE"); + writer->writeCharacters("."); + writer->writeEndElement(); // para newLine(); - writer->writeStartElement(dbNamespace, "para"); - + break; + case PrivateSignal: + writer->writeTextElement(dbNamespace, "para", + "This is a private signal. It can be used in signal connections but " + "cannot be emitted by the user."); + break; + case AssociatedProperties: + { + if (!node->isFunction()) + return; + const FunctionNode *fn = static_cast<const FunctionNode *>(node); NodeList nodes = fn->associatedProperties(); + if (nodes.isEmpty()) + return; std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan); for (const auto node : qAsConst(nodes)) { QString msg; const auto pn = static_cast<const PropertyNode *>(node); switch (pn->role(fn)) { case PropertyNode::Getter: - msg = QStringLiteral("Getter function "); + msg = QStringLiteral("Getter function"); break; case PropertyNode::Setter: - msg = QStringLiteral("Setter function "); + msg = QStringLiteral("Setter function"); break; case PropertyNode::Resetter: - msg = QStringLiteral("Resetter function "); + msg = QStringLiteral("Resetter function"); break; case PropertyNode::Notifier: - msg = QStringLiteral("Notifier signal "); + msg = QStringLiteral("Notifier signal"); break; default: - break; + continue; } - writer->writeCharacters(msg + "for property "); + writer->writeCharacters(msg + " for property "); generateSimpleLink(linkForNode(pn, nullptr), pn->name()); writer->writeCharacters(". "); } - writer->writeEndElement(); // para - newLine(); - writer->writeEndElement(); // note - newLine(); + break; } + default: + break; + } + + writer->writeEndElement(); // note + newLine(); } void DocBookGenerator::generateDetailedMember(const Node *node, const PageNode *relative) @@ -3568,13 +3564,6 @@ void DocBookGenerator::generateDetailedMember(const Node *node, const PageNode * newLine(); generateSectionList(notifiers, node); } - } else if (node->isFunction()) { - const auto fn = static_cast<const FunctionNode *>(node); - if (fn->isPrivateSignal()) - generatePrivateSignalNote(); - if (fn->isInvokable()) - generateInvokableNote(node); - generateAssociatedPropertyNotes(fn); } else if (node->isEnumType()) { const auto en = static_cast<const EnumNode *>(node); @@ -3646,9 +3635,9 @@ void DocBookGenerator::generateSectionList(const Section §ion, const Node *r newLine(); if (hasPrivateSignals) - generatePrivateSignalNote(); + generateAddendum(relative, Generator::PrivateSignal); if (isInvokable) - generateInvokableNote(relative); + generateAddendum(relative, Generator::Invokable); } if (status != Section::Obsolete && section.style() == Section::Summary diff --git a/src/qdoc/docbookgenerator.h b/src/qdoc/docbookgenerator.h index 9a223f4af..5eea595f7 100644 --- a/src/qdoc/docbookgenerator.h +++ b/src/qdoc/docbookgenerator.h @@ -81,6 +81,7 @@ protected: bool generateStatus(const Node *node); bool generateThreadSafeness(const Node *node); bool generateSince(const Node *node); + void generateAddendum(const Node *node, Generator::Addendum type, CodeMarker *marker = nullptr) override; using Generator::generateBody; void generateBody(const Node *node); @@ -133,9 +134,6 @@ private: void generateExampleFilePage(const Node *en, const QString &file, CodeMarker *marker = nullptr) override; void generateOverloadedSignal(const Node *node); - void generatePrivateSignalNote(); - void generateInvokableNote(const Node *node); - void generateAssociatedPropertyNotes(const FunctionNode *fn); bool generateQmlText(const Text &text, const Node *relative, CodeMarker *marker = nullptr, const QString &qmlName = QString()) override; void generateRequiredLinks(const Node *node); diff --git a/src/qdoc/generator.cpp b/src/qdoc/generator.cpp index 3e689c4b5..f8fb9ad02 100644 --- a/src/qdoc/generator.cpp +++ b/src/qdoc/generator.cpp @@ -759,55 +759,55 @@ const Atom *Generator::generateAtomList(const Atom *atom, const Node *relative, */ void Generator::generateBody(const Node *node, CodeMarker *marker) { + const FunctionNode *fn = node->isFunction() ? static_cast<const FunctionNode *>(node) : nullptr; if (!node->hasDoc() && !node->hasSharedDoc()) { /* Test for special function, like a destructor or copy constructor, that has no documentation. */ - if (node->isFunction()) { - const FunctionNode *func = static_cast<const FunctionNode *>(node); - if (func->isDtor()) { + if (fn) { + if (fn->isDtor()) { Text text; text << "Destroys the instance of "; - text << func->parent()->name() << "."; - if (func->isVirtual()) + text << fn->parent()->name() << "."; + if (fn->isVirtual()) text << " The destructor is virtual."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } else if (func->isCtor()) { + } else if (fn->isCtor()) { Text text; text << "Default constructs an instance of "; - text << func->parent()->name() << "."; + text << fn->parent()->name() << "."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } else if (func->isCCtor()) { + } else if (fn->isCCtor()) { Text text; text << "Copy constructor."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } else if (func->isMCtor()) { + } else if (fn->isMCtor()) { Text text; text << "Move-copy constructor."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } else if (func->isCAssign()) { + } else if (fn->isCAssign()) { Text text; text << "Copy-assignment operator."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; - } else if (func->isMAssign()) { + } else if (fn->isMAssign()) { Text text; text << "Move-assignment operator."; out() << "<p>"; generateText(text, node, marker); out() << "</p>"; } else if (!node->isWrapper() && !node->isMarkedReimp()) { - if (!func->isIgnored()) // undocumented functions added by Q_OBJECT + if (!fn->isIgnored()) // undocumented functions added by Q_OBJECT node->location().warning( tr("No documentation for '%1'").arg(node->plainSignature())); } @@ -818,8 +818,7 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) tr("No documentation for '%1'").arg(node->plainSignature())); } } else if (!node->isSharingComment()) { - if (node->isFunction()) { - const FunctionNode *fn = static_cast<const FunctionNode *>(node); + if (fn) { if (!fn->overridesThis().isEmpty()) generateReimplementsClause(fn, marker); } @@ -829,6 +828,16 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) return; } + if (fn) { + if (fn->isPrivateSignal()) + generateAddendum(node, PrivateSignal, marker); + if (fn->isInvokable()) + generateAddendum(node, Invokable, marker); + if (fn->hasAssociatedProperties()) + generateAddendum(node, AssociatedProperties, marker); + } + + // Generate warnings if (node->isEnumType()) { const EnumNode *enume = static_cast<const EnumNode *>(node); @@ -860,8 +869,7 @@ void Generator::generateBody(const Node *node, CodeMarker *marker) } } } - } else if (node->isFunction()) { - const FunctionNode *fn = static_cast<const FunctionNode *>(node); + } else if (fn) { const QSet<QString> declaredNames = fn->parameters().getNames(); const QSet<QString> documentedNames = fn->doc().parameterNames(); if (declaredNames != documentedNames) { @@ -1344,33 +1352,66 @@ void Generator::generateStatus(const Node *node, CodeMarker *marker) } /*! - Generates a bold line that explains that this is a private signal, - only made public to let users pass it to connect(). - */ -void Generator::generatePrivateSignalNote(const Node *node, CodeMarker *marker) + Generates an addendum note of type \a type for \a node, using \a marker + as the code marker. +*/ +void Generator::generateAddendum(const Node *node, Addendum type, CodeMarker *marker) { + Q_ASSERT(node && !node->name().isEmpty()); Text text; text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) - << "Note: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) - << "This is a private signal. It can be used in signal connections but cannot be emitted " - "by the user." - << Atom::ParaRight; - generateText(text, node, marker); -} + << "Note: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD); + + switch (type) { + case Invokable: + text << "This function can be invoked via the meta-object system and from QML. See " + << Atom(Atom::Link, "Q_INVOKABLE") + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << "Q_INVOKABLE" + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << "."; + break; + case PrivateSignal: + text << "This is a private signal. It can be used in signal connections " + "but cannot be emitted by the user."; + break; + case AssociatedProperties: + { + if (!node->isFunction()) + return; + const FunctionNode *fn = static_cast<const FunctionNode *>(node); + NodeList nodes = fn->associatedProperties(); + if (nodes.isEmpty()) + return; + std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan); + for (const auto *n : qAsConst(nodes)) { + QString msg; + const PropertyNode *pn = static_cast<const PropertyNode *>(n); + switch (pn->role(fn)) { + case PropertyNode::Getter: + msg = QStringLiteral("Getter function"); + break; + case PropertyNode::Setter: + msg = QStringLiteral("Setter function"); + break; + case PropertyNode::Resetter: + msg = QStringLiteral("Resetter function"); + break; + case PropertyNode::Notifier: + msg = QStringLiteral("Notifier signal"); + break; + default: + continue; + } + text << msg << " for property " << Atom(Atom::Link, pn->name()) + << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << pn->name() + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << ". "; + } + break; + } + default: + return; + } -/*! - Generates a bold line that says: - "This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE." - */ -void Generator::generateInvokableNote(const Node *node, CodeMarker *marker) -{ - Text text; - text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD) - << "Note: " << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) - << "This function can be invoked via the meta-object system and from QML. See " - << Atom(Atom::Link, "Q_INVOKABLE") << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) - << "Q_INVOKABLE" << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << "." - << Atom::ParaRight; + text << Atom::ParaRight; generateText(text, node, marker); } diff --git a/src/qdoc/generator.h b/src/qdoc/generator.h index f28432bd2..d72a77bd1 100644 --- a/src/qdoc/generator.h +++ b/src/qdoc/generator.h @@ -53,6 +53,7 @@ class Generator public: enum ListType { Generic, Obsolete }; + enum Addendum { Invokable, PrivateSignal, AssociatedProperties }; Generator(); virtual ~Generator(); @@ -140,8 +141,7 @@ protected: static QString formatSince(const Node *node); void generateSince(const Node *node, CodeMarker *marker); void generateStatus(const Node *node, CodeMarker *marker); - void generatePrivateSignalNote(const Node *node, CodeMarker *marker); - void generateInvokableNote(const Node *node, CodeMarker *marker); + virtual void generateAddendum(const Node *node, Addendum type, CodeMarker *marker); void generateThreadSafeness(const Node *node, CodeMarker *marker); QString getMetadataElement(const Aggregate *inner, const QString &t); QStringList getMetadataElements(const Aggregate *inner, const QString &t); diff --git a/src/qdoc/htmlgenerator.cpp b/src/qdoc/htmlgenerator.cpp index e7f4dc1cb..c440b31c3 100644 --- a/src/qdoc/htmlgenerator.cpp +++ b/src/qdoc/htmlgenerator.cpp @@ -829,7 +829,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark out() << formattingRightMap()[ATOM_FORMATTING_BOLD]; break; case Atom::NoteRight: - out() << "</p>"; + out() << "</p>\n"; break; case Atom::LegaleseLeft: out() << "<div class=\"LegaleseLeft\">"; @@ -3114,10 +3114,12 @@ void HtmlGenerator::generateSectionList(const Section §ion, const Node *rela if (twoColumn) out() << "</td></tr>\n</table></div>\n"; } - if (hasPrivateSignals && alignNames) - generatePrivateSignalNote(relative, marker); - if (isInvokable && alignNames) - generateInvokableNote(relative, marker); + if (alignNames) { + if (hasPrivateSignals) + generateAddendum(relative, Generator::PrivateSignal, marker); + if (isInvokable) + generateAddendum(relative, Generator::Invokable, marker); + } } if (status != Section::Obsolete && section.style() == Section::Summary @@ -3502,13 +3504,6 @@ void HtmlGenerator::generateDetailedMember(const Node *node, const PageNode *rel out() << "<p><b>Notifier signal:</b></p>\n"; generateSectionList(notifiers, node, marker); } - } else if (node->isFunction()) { - const FunctionNode *fn = static_cast<const FunctionNode *>(node); - if (fn->isPrivateSignal()) - generatePrivateSignalNote(node, marker); - if (fn->isInvokable()) - generateInvokableNote(node, marker); - generateAssociatedPropertyNotes(const_cast<FunctionNode *>(fn)); } else if (node->isEnumType()) { const EnumNode *etn = static_cast<const EnumNode *>(node); if (etn->flagsType()) { @@ -4211,40 +4206,4 @@ QXmlStreamWriter &HtmlGenerator::xmlWriter() return *xmlWriterStack.top(); } -/*! - Generates bold Note lines that explain how function \a fn - is associated with each of its associated properties. - */ -void HtmlGenerator::generateAssociatedPropertyNotes(const FunctionNode *fn) -{ - if (fn->hasAssociatedProperties()) { - out() << "<p><b>Note:</b> "; - NodeList nodes = fn->associatedProperties(); - std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan); - for (const auto *node : qAsConst(nodes)) { - QString msg; - const PropertyNode *pn = static_cast<const PropertyNode *>(node); - switch (pn->role(fn)) { - case PropertyNode::Getter: - msg = QStringLiteral("Getter function "); - break; - case PropertyNode::Setter: - msg = QStringLiteral("Setter function "); - break; - case PropertyNode::Resetter: - msg = QStringLiteral("Resetter function "); - break; - case PropertyNode::Notifier: - msg = QStringLiteral("Notifier signal "); - break; - default: - break; - } - QString link = linkForNode(pn, nullptr); - out() << msg << "for property <a href=\"" << link << "\">" << pn->name() << "</a>. "; - } - out() << "</p>"; - } -} - QT_END_NAMESPACE diff --git a/src/qdoc/htmlgenerator.h b/src/qdoc/htmlgenerator.h index ea50e4baf..c1a47ba33 100644 --- a/src/qdoc/htmlgenerator.h +++ b/src/qdoc/htmlgenerator.h @@ -81,7 +81,6 @@ protected: void generateManifestFile(const QString &manifest, const QString &element); void readManifestMetaContent(); void generateKeywordAnchors(const Node *node); - void generateAssociatedPropertyNotes(const FunctionNode *fn); private: enum SubTitleSize { SmallSubTitle, LargeSubTitle }; diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-type.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-type.xml index 1ab15056a..59ed97a01 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-type.xml +++ b/tests/auto/qdoc/generatedoutput/expected_output/docbook/qml-qdoc-test-type.xml @@ -135,6 +135,9 @@ <db:section xml:id="completed-signal"> <db:title>completed(<db:emphasis>status</db:emphasis>)</db:title> <db:para>This signal is emitted when the operation completed with <db:code role="parameter">status</db:code>.</db:para> +<db:note> +<db:para>The corresponding handler is <db:code>onCompleted</db:code>.</db:para> +</db:note> </db:section> </db:section> <db:section xml:id="attached-signal-documentation"> @@ -142,6 +145,9 @@ <db:section xml:id="configured-signal"> <db:title>configured()</db:title> <db:para>This attached signal is emitted when the type was configured.</db:para> +<db:note> +<db:para>The corresponding handler is <db:code>onConfigured</db:code>.</db:para> +</db:note> </db:section> </db:section> <db:section xml:id="method-documentation"> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html index 166cbee81..f18e97082 100644 --- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html +++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html @@ -143,6 +143,7 @@ <a name="completed-signal"></a><span class="name">completed</span>(<i>status</i>)</p></td></tr> </table></div></div> <div class="qmldoc"><p>This signal is emitted when the operation completed with <i>status</i>.</p> +<p><b>Note: </b>The corresponding handler is <code>onCompleted</code>.</p> </div></div><!-- @@@completed --> <br/> <h2>Attached Signal Documentation</h2> @@ -154,6 +155,7 @@ <a name="configured-signal"></a><span class="name">configured</span>()</p></td></tr> </table></div></div> <div class="qmldoc"><p>This attached signal is emitted when the type was configured.</p> +<p><b>Note: </b>The corresponding handler is <code>onConfigured</code>.</p> </div></div><!-- @@@configured --> <br/> <h2>Method Documentation</h2> diff --git a/tests/auto/qdoc/generatedoutput/testdata/qml/type.cpp b/tests/auto/qdoc/generatedoutput/testdata/qml/type.cpp index bf04bdb43..10a310a87 100644 --- a/tests/auto/qdoc/generatedoutput/testdata/qml/type.cpp +++ b/tests/auto/qdoc/generatedoutput/testdata/qml/type.cpp @@ -92,10 +92,14 @@ \qmlsignal Type::completed(int status) This signal is emitted when the operation completed with \a status. + + \note The corresponding handler is \c onCompleted. */ /*! \qmlattachedsignal Type::configured() This attached signal is emitted when the type was configured. + + \note The corresponding handler is \c onConfigured. */ |