我需要做的是:我需要使用存储聊天消息的QML 创建聊天窗口ListView.我设置listView.positionViewAtEnd()为了跟随最后的消息.positionViewAtEnd当我向上滚动时,我禁用,这样我每次收到新消息时都可以读取过去的消息,而不会跳到最后.
问题:向上滚动后,每次收到新消息时,它都会跳到列表的开头.为了解决这个问题,我设法存储contentY列表并在每次onCountChanged调用处理程序时重置它(请参阅下面的代码):
ListView {
id: messagesList
model: contact? contact.messages: []
delegate: delegate
anchors.fill: parent
anchors.bottomMargin: 20
height: parent.height
anchors.margins: 10
property int currentContentY
onMovementEnded: {
currentContentY = contentY
}
onCountChanged: {
contentY = currentContentY
}
onContentYChanged: {
console.log(".....contentY: " + contentY)
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,即使我设置了最后一个contentY,在模型更改之前,列表仍然会跳转一些(几个像素,而不是结束或开始)并且它不会始终跳转.当我走到列表的顶部并打印出来时,contentY我会得到负值.理论上,contentY在列表的开头应该是0.
有人能告诉我出了什么问题吗?或者可能建议另一种解决方案来创建我的消息列表
比你提前!:)
我曾多次遇到这个问题,动态创建对象,无论它们是用QML还是C++创建的.在仍在使用时删除对象,导致硬崩溃,没有明显原因.这些对象仍然被引用并且是其他对象的一部分,一直到根对象,所以我发现QML在它们的引用数仍然高于零时删除这些对象是很奇怪的.
到目前为止,我找到的唯一解决方案是使用C++创建对象并将所有权明确设置为CPP,从而无法从QML中删除对象.
起初我认为它可能是一个父母问题,因为我使用QObject派生类,动态实例化的QML方法传递Item一个父类,而QtObject甚至没有父属性 - 它没有公开QObject.
但后来我尝试了一个Qobject派生的暴露和使用育儿,最后甚至尝试使用Item只是为了确保对象是正确的父对象,但这种行为仍然存在.
这是一个产生这种行为的例子,遗憾的是我无法将其压平为单个源,因为Components 的深层嵌套会破坏它:
// ObjMain.qml
Item {
property ListModel list : ListModel { }
Component.onCompleted: console.log("created " + this + " with parent " + parent)
Component.onDestruction: console.log("deleted " + this)
}
// Uimain.qml
Item {
id: main
width: childrenRect.width
height: childrenRect.height
property Item object
property bool expanded : true
Loader {
id: li
x: 50
y: 50
active: expanded && …Run Code Online (Sandbox Code Playgroud) 我有一个使用Open GL绘制的Qt应用程序。在某些时候,我正在使用与QQuickWindow关联的QQuickRenderControl方法将QML场景绘制到纹理中,以便稍后在最终图像中进行合成。
现在,我正在考虑将OpenGL移植到Vulkan,但不确定在此QML层是否可以这样做。
阅读Qt文档,我发现
QQuickWindow使用OpenGL顶部的场景图进行渲染。
您认为可以将其移植到Vulkan吗?也许是压倒一切的QQuickWindow和QQuickRenderControl?我不是Qt专家,所以也许有人可以让我对问题有更好的了解。
在成功编译项目之后,我获得了一个可执行文件.
当我输入./program结果时,我看到:
QML Error: qrc:///qml/main.qml:25:1:module "QtGraphicalEffects" is not installed
qrc:///qml/main.qml:24:1:module "QtQuick" is not installed
Run Code Online (Sandbox Code Playgroud)
我正在使用QtQuick 2.0,Qt5和Ubuntu,QtQuick和QtGraphicalEffects,~/Qt5.0.2/5.0.2/gcc/qml/我已经从站点项目安装了新的Qt SDK.
我已尝试在Windows 7上运行此应用程序,但结果相同.
有人可以帮忙吗?
我width在QML上有一个属性,该属性Rectangle是基于另一个具有id mainwindow和以下数组属性之一的Rectangle设置的mainwindow:
width: mainwindow.width/mainwindow.numColsPerRow[positionRow]
这在我的矩形设置时有效; 也就是说,数组中的元素numColsPerRow是正确的.
但是,在设置此Rectangle之后,如果我更改此Rectangle 内numColsPerRow的值width没有任何效果.
QML不允许属性绑定到数组元素吗?
我正在使用Qt 5.2 beta,Qt Quick 2.1.
我有直接的Flickable组件问题.
这是最小的工作代码示例:
import QtQuick 2.1
import QtQuick.Controls 1.0
ApplicationWindow {
width: 300
height: 200
Rectangle {
anchors.fill: parent
color: "green"
Flickable {
id: flickArea
anchors {fill: parent; margins: 10; }
contentWidth: rect.width;
contentHeight: rect.height
Rectangle {
id: rect
x: 0; y: 0;
width: 200; height: 300;
color: "lightgrey"
Rectangle {
anchors { fill: parent; margins: 10; }
color: "red"
}
}
}
}
Button {
anchors.bottom: parent.bottom;
anchors.horizontalCenter: parent.horizontalCenter;
text: "Scale flickArea"
onClicked: …Run Code Online (Sandbox Code Playgroud) 我需要将屏幕锁定到我正在制作的Android应用程序的特定方向.有没有办法在QML中做到这一点?谷歌没有给我任何答案.
我使用的是Qt 5.2.
我一直在使用Box2D QML插件玩很多东西,看起来非常棒.但是,我想在Android(SGS2)上部署我的示例应用程序,但我似乎无法让它工作.无论我是尝试在AVD上还是在设备上运行它,它都不起作用.androiddeployqt成功完成,但后来我得到"无法启动'MyApp'",而没有其他信息,为什么它无法启动.我可以在AVD和设备上成功运行qml应用程序,但这与插件有关,我找不到任何引用来解决它.
我尝试以不同的方式设置DEPLOYMENTFOLDERS,但如果我弄错了,那么整件事就会失败.即使我没有得到错误,在这种情况下我认为我做对了,它仍然无法启动.
我一直在努力安静一段时间,并且找不到任何有用的信息来解决它.如果您知道任何使用c ++插件并且可以在Android设备上成功部署的项目,那也会很好.
我正在使用为Android编译的Qt 5.2.0和box2d的qt5分支
我想为QML实现滚动动画ListView.这是一个示例图像:

任何人都可以建议我实施这个吗?
谢谢.
有没有办法隐藏某些项目ListView?
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
ApplicationWindow {
title: qsTr("Hello World")
width: 640
height: 480
visible: true
ListView {
anchors.fill: parent
model: ListModel {
ListElement { color: "red"; visible: true}
ListElement { color: "green"; visible: false}
ListElement { color: "blue"; visible: true}
}
delegate: Rectangle {
width: parent.width
height: model.visible ? 30 : 0
color: model.color
visible: model.visible
enabled: model.visible
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果只有ListView可以忽略不可见的Items',上面的解决方案会很好height.
设置height到0手动是坏的表现,所以我需要一个更好的解决方案.你可以帮帮我吗?