编辑:问题似乎与Qt 5.15有关,并且不会与Qt 5.14一起出现!
我正在学习QML,并制作了一个由包含ListView的Window组成的应用程序。
我正在尝试添加一个按钮,该按钮应位于窗口底部的固定位置(滚动时不应移动)。因此,我决定将此Button添加到ListView的footer属性,并设置footerPositioning:ListView.OverlayFooter
但是,这样做会使按钮完全无响应。如果我注释掉footerPositioning行,则该按钮将按预期工作,但放置位置错误。
该文档指出:“如果footerPositioning未设置为ListView.InlineFooter,则用户将无法在页脚中按下并轻拂列表。在任何情况下,页脚项目都可能包含可自定义处理鼠标或触摸输入的项目或事件处理程序” ; 在我看来,这并不是说该项目(这里是一个按钮)事件处理不起作用。
这是一个示例代码,显示了无响应的按钮行为:
调试文件
import QtQuick 2.9
import QtQuick.Window 2.9
import QtQuick.Layouts 1.9
import QtQuick.Controls 2.9
Window {
visible: true
width: 260
height: 520
ListView {
anchors.fill: parent
clip: true
spacing: 6
model: 4
delegate: RowLayout {
width: parent.width
Rectangle {
Layout.fillWidth: true
height: 60
color: "#ff0000"
}
}
footerPositioning: ListView.OverlayFooter // comment out this line to make the button responsive
footer: Button {
height: 180
width: 90
background: Rectangle {
id: backbtn
color: "gray"
}
onClicked: {
backbtn.color = "#00ff00"
}
}
}
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
#if defined(Q_OS_WIN)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/Debug.qml")));
if (engine.rootObjects().isEmpty()) {
return -1;
}
return app.exec();
}
如何在保持ListView.OverlayFooter的同时使按钮响应?
正如Thomenson所指出的,此问题与错误有关。在Qt 5.15中,使用启用了剪辑的ListView和ListView.OverlayFooter似乎在页脚中禁用了鼠标事件处理。
从Qt 5.15切换到Qt 5.14可以解决此问题。
有关此问题的bugtracker可以在这里找到:bugreports.qt.io/browse/QTBUG-85302
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句