EDIT : Le problème semble être lié à Qt 5.15 et ne se manifeste pas avec Qt 5.14 !
J'apprends le langage QML et j'ai créé une application composée d'une fenêtre contenant un ListView.
J'essaie d'ajouter un bouton, qui doit se trouver à une position fixe en bas de la fenêtre (il ne doit pas bouger lorsque je fais défiler la page). J'ai donc décidé d'ajouter ce bouton à l'attribut footer de la ListView, et de définir footerPositioning : ListView.OverlayFooter
Cependant, si vous le faites, le bouton ne répondra plus du tout. Si je commente la ligne footerPositioning, le bouton fonctionne comme prévu, mais il est mal placé.
La documentation indique que " Si footerPositioning n'est pas défini sur ListView.InlineFooter, l'utilisateur ne peut pas appuyer sur la liste et la feuilleter à partir du pied de page. Dans tous les cas, l'élément de pied de page peut contenir des éléments ou des gestionnaires d'événements qui permettent une gestion personnalisée de la souris ou des entrées tactiles. "Ce qui, selon moi, ne veut pas dire que la gestion de l'événement de l'élément (ici un bouton) ne devrait pas fonctionner.
Voici un exemple de code qui montre le comportement du bouton non réactif :
Debug.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();
}
Comment puis-je rendre le bouton réactif tout en conservant ListView.OverlayFooter ?