QmlDesigner: Fix all changed signals get skipped

Fix "positionChanged" signal getting skipped when creating the list of
potential signal connections.

Task-number: QDS-11625
Change-Id: Ic0e3e7170044c635e83bc22ac1fc82c92102f584
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Henning Gruendl
2024-01-15 14:41:05 +01:00
committed by Henning Gründl
parent afdf82a6c1
commit ae28fb67b5
3 changed files with 33 additions and 49 deletions

View File

@@ -11,6 +11,7 @@
#include "formatoperation.h"
#include "groupitemaction.h"
#include "modelnodecontextmenu_helper.h"
#include "propertytreemodel.h"
#include "qmldesignerconstants.h"
#include "qmleditormenu.h"
#include "rewritingexception.h"
@@ -475,35 +476,20 @@ QStringList getSignalsList(const ModelNode &node)
if (!node.hasMetaInfo())
return {};
QStringList signalsList;
NodeMetaInfo nodeMetaInfo = node.metaInfo();
QStringList signalList;
for (const auto &signalName : nodeMetaInfo.signalNames()) {
signalsList << QString::fromUtf8(signalName);
}
std::vector<PropertyName> signalVector = PropertyTreeModel::sortedAndFilteredSignalNames(
node.metaInfo());
//on...Changed are the most regular signals, we assign them the lowest priority,
//we don't need them right now
// QStringList signalsWithChanged = signalsList.filter("Changed");
std::vector<QString> signalVectorString = Utils::transform(signalVector,
[](const PropertyName &name) {
return QString::fromUtf8(name);
});
//these are item specific, like MouseArea.clicked, they have higher priority
QStringList signalsWithoutChanged = signalsList;
signalsWithoutChanged.removeIf([](QString str) {
if (str.endsWith("Changed"))
return true;
return false;
});
signalList.reserve(Utils::ssize(signalVectorString));
std::copy(signalVectorString.begin(), signalVectorString.end(), std::back_inserter(signalList));
QStringList finalResult;
finalResult.append(signalsWithoutChanged);
if (finalResult.isEmpty())
finalResult = signalsList;
finalResult.removeDuplicates();
return finalResult;
return signalList;
}
struct SlotEntry

View File

@@ -72,9 +72,7 @@ const std::vector<PropertyName> blockListSlots = {"childAt",
"inputMethodQuery",
"positionAt",
"positionToRectangle",
"isRightToLeft"
};
"isRightToLeft"};
const std::vector<PropertyName> priorityListSignals = {"clicked",
"doubleClicked",
@@ -99,7 +97,8 @@ const std::vector<PropertyName> priorityListSignals = {"clicked",
"enabledChanged",
"visibleChanged",
"opacityChanged",
"rotationChanged"};
"rotationChanged",
"positionChanged"};
const std::vector<PropertyName> priorityListProperties = {"opacity",
"checked",
@@ -572,8 +571,7 @@ const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredPropertyName
const PropertyName name = metaInfo.name();
if (!m_includeDotPropertiesOnFirstLevel
&& name.contains("."))
if (!m_includeDotPropertiesOnFirstLevel && name.contains("."))
return false;
return filterProperty(name, metaInfo, recursive);
@@ -606,8 +604,8 @@ const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredPropertyName
return checkedPriorityList;
}
const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(
const NodeMetaInfo &metaInfo, bool recursive) const
std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo,
bool recursive)
{
Q_UNUSED(recursive);
@@ -627,15 +625,14 @@ const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(
std::set<PropertyName> set(std::make_move_iterator(sorted.begin()),
std::make_move_iterator(sorted.end()));
auto checkedPriorityList = Utils::filtered(priorityListSignals,
[&set](const PropertyName &name) {
auto it = set.find(name);
const bool b = it != set.end();
if (b)
set.erase(it);
auto checkedPriorityList = Utils::filtered(priorityListSignals, [&set](const PropertyName &name) {
auto it = set.find(name);
const bool b = it != set.end();
if (b)
set.erase(it);
return b;
});
return b;
});
//const int priorityLength = checkedPriorityList.size(); We eventually require this to get the prioproperties
@@ -648,8 +645,8 @@ const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSignalNames(
return checkedPriorityList;
}
const std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSlotNames(
const NodeMetaInfo &metaInfo, bool recursive) const
std::vector<PropertyName> PropertyTreeModel::sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo,
bool recursive)
{
Q_UNUSED(recursive);

View File

@@ -84,6 +84,12 @@ public:
QHash<int, QByteArray> roleNames() const override;
static std::vector<PropertyName> sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo,
bool recursive = false);
static std::vector<PropertyName> sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo,
bool recursive = false);
private:
QModelIndex ensureModelIndex(const ModelNode &node, int row) const;
QModelIndex ensureModelIndex(const ModelNode &node, const PropertyName &name, int row) const;
@@ -94,15 +100,10 @@ private:
const std::vector<PropertyName> getDynamicProperties(const ModelNode &modelNode) const;
const std::vector<PropertyName> getDynamicSignals(const ModelNode &modelNode) const;
const std::vector<PropertyName> sortedAndFilteredPropertyNames(const NodeMetaInfo &metaInfo,
bool recursive = false) const;
const std::vector<PropertyName> sortedAndFilteredSignalNames(const NodeMetaInfo &metaInfo,
bool recursive = false) const;
const std::vector<PropertyName> sortedAndFilteredSlotNames(const NodeMetaInfo &metaInfo,
bool recursive = false) const;
const std::vector<PropertyName> sortedDotPropertyNames(const NodeMetaInfo &metaInfo,
const PropertyName &propertyName) const;