从默认的Qt 5.12.4-“ Qt快速Qpplication-滚动”中,模型从20修改为200。
dir | Rename-Item -NewName {$_.Basename + ' 2013' + $_.Extension} -whatif
在Qt Creator以及大多数浏览器和其他应用中,更改“选择每次滚动多少行”会立即生效,但在此无效。
如何使我的应用程序表现得与众不同?
答案 0 :(得分:1)
深入研究Qt文档后,我发现了以下可能的解决方法。
首先,您需要使用应用程序的QStyleHints
在Windows控制面板中确定鼠标设置。然后,您需要将wheelScrollLines
属性转移到您的qml组件。
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QStyleHints>
#include <QQuickView>
#include <QVariant>
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QQmlContext* context = engine.rootContext();
auto scrollLines =QVariant::fromValue(app.styleHints()->wheelScrollLines());
qDebug() << scrollLines;
context->setContextProperty("scrollLines", scrollLines);
engine.load(QUrl("./data/main.qml"));
return app.exec();
}
在您的qml组件内部,真正有趣的地方将开始。您需要根据您的flickDeceleration
和项目代表高度来设置属性maximumFlickVelocity
和scrollLines
。
不幸的是,鉴于这两个属性,似乎没有文档可以为您提供要滚动的像素的确切数量。因此,必须依靠Qt框架内的猜测或调试。如果以像素/秒为单位的速度发生变化,则会将其写入控制台。这可能会给您一个线索。
import QtQuick 2.12
import QtQuick.Controls 2.5
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Scroll")
ScrollView {
anchors.fill: parent
ListView {
width: parent.width
model: 200
property double pixelsToScroll: 100*scrollLines
flickDeceleration: -0.5*(maximumFlickVelocity*0.25)*(maximumFlickVelocity*0.25)/pixelsToScroll
onVerticalVelocityChanged : console.log(verticalVelocity)
maximumFlickVelocity: 2000 // Pixels per Second??? maximumFlickVelocity*0.25 seems to be the initial velocity
delegate: ItemDelegate {
text: "Item " + (index + 1)
width: parent.width
height: 100
}
}
}
}