编辑:该问题似乎与Qt 5.15有关,而Qt 5.14没有出现!
我正在学习QML,并制作了一个由包含ListView的Window组成的应用程序。
我正在尝试添加一个按钮,它应该在窗口底部的固定位置(当我滚动时它不应该移动(。因此,我决定将此按钮添加到ListView的页脚属性中,并设置footerPositioning:ListView.OverlayFooter
但是,这样做会使按钮完全没有响应。如果我注释掉页脚定位行,按钮会按预期工作,但位置错误。
该文件指出如果footerPositioning未设置为ListView.InlineFooter,则用户无法从页脚中轻按列表。在任何情况下,页脚项目可以包含提供鼠标或触摸输入的自定义处理的项目或事件处理程序";对我来说,这并不是说项目(这里是一个按钮(事件处理不应该工作。
以下是显示无响应按钮行为的代码示例:
调试qml
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所指出的,这个问题与bug有关。在问题5.15中,使用启用了剪辑和ListView.OverlayFooter的ListView似乎会禁用页脚中的鼠标事件处理。
从问题5.15切换到问题5.14解决了这个问题。
相关问题的错误跟踪器可以在以下位置找到:bugreports.qt.io/browse/QTBUG-85302
在修复QTBUG-85302之前,我们无法降级。解决方法是为ListView
设置clip: false
,为父容器项设置clip: true
:Rectangle
或Item
,其大小相同。