我想在长按后拖动我的自定义按钮 QML。我已经实现了这种行为,但是问题是在启用后drag,我需要再次按下按钮才能真正开始拖动。如果我想在长按后不松开而移动按钮,我应该如何实现这种机制?
这是我的按钮代码(onReleased并且onLongPressed是我自己的信号):
ButtonWidget.SoftButtonUI
{
id:softButtonDelegate2
x:500
y:300
labelText: "button"
iconImageSource: path
isGrayedOut: false
Drag.active: dragArea2.drag.active
Drag.hotSpot.x: 10
Drag.hotSpot.y: 10
onReleased:
{
console.log("onClicked")
}
onLongPressed:
{
console.log("onLongPressed")
dragArea2.enabled = true
}
MouseArea {
id: dragArea2
enabled: false
anchors.fill: parent
drag.target: parent
onReleased: parent.Drag.drop()
onClicked: {
console.log("MouseArea onClicked")
}
onPressAndHold: {
console.log("MouseArea onPressAndHold")
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?
我有我的自定义列表模型,我放置了应该在QML视图上显示的数据.但由于某种原因,QML中的视图有时会正常更新,有时会使用以前的数据,有时不会执行更新.
这是我填充模型的函数 - 从其他一些线程调用此函数.
void MyScreen::fillListModel()
{
const QString SEPARATOR = " ";
myListModel->resetModel();
for (int i = 0; i < MAX_ROWS; ++i)
{
QString key = QString::fromUtf16(MyData::getParameterKey(i).c_str());
QString val = QString::fromUtf16(MyData::getParameterVal(i).c_str());
myListModel->addItem(key + SEPARATOR + val);
}
}
Run Code Online (Sandbox Code Playgroud)
模型重置的实现:
void BrowsingModelBase::resetModel()
{
beginResetModel();
m_items.clear();
endResetModel();
}
Run Code Online (Sandbox Code Playgroud)
执行addItem():
void BrowsingModelBase::addItem(const BrowsingItemModelBase &item)
{
int count = m_items.size();
beginInsertRows(QModelIndex(), count, count);
m_items.append(item);
endInsertRows();
}
Run Code Online (Sandbox Code Playgroud)
最后我的QML文件:
MyScreen {
Column {
id: myFlowList
y: 110
x: 220
ListView {
height:1000
spacing: …Run Code Online (Sandbox Code Playgroud)