我需要做的是:我需要使用存储聊天消息的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.
有人能告诉我出了什么问题吗?或者可能建议另一种解决方案来创建我的消息列表
比你提前!:)
我有一个使用Open GL绘制的Qt应用程序。在某些时候,我正在使用与QQuickWindow关联的QQuickRenderControl方法将QML场景绘制到纹理中,以便稍后在最终图像中进行合成。
现在,我正在考虑将OpenGL移植到Vulkan,但不确定在此QML层是否可以这样做。
阅读Qt文档,我发现
QQuickWindow使用OpenGL顶部的场景图进行渲染。
您认为可以将其移植到Vulkan吗?也许是压倒一切的QQuickWindow和QQuickRenderControl?我不是Qt专家,所以也许有人可以让我对问题有更好的了解。
我想知道我可以在QML环境中使用哪些字体作为font.family属性.这些字体是特定于系统还是内置于框架中?有没有办法列出所有可用的字体?
我想为QML实现滚动动画ListView.这是一个示例图像:

任何人都可以建议我实施这个吗?
谢谢.
Column 文档解释了如何实现这一目标:

但是,我想实现这个目标:

也就是说,其中的所有项目Column都应该与中心水平对齐.anchors.horizontalCenter: parent.Center不起作用.如何获得所需的结果?
我有一个id我需要在QML树中找到的对象字符串.例如:
var idToFind = "myBtnId"
Run Code Online (Sandbox Code Playgroud)
我可以做以下的事情吗?
var objectThatINeed = myMainWindow.findObjectById(idToFind)
Run Code Online (Sandbox Code Playgroud)
据我所知,我可以objectName用于此目的(至少从C++开始).我可以在id不引入名称的情况下以某种方式重用现有的吗?
我想将此对象用作其他动态创建的控件的父对象.
我正在尝试在Qt快速应用程序中使用QML材料库.
但是,当我尝试使用导入代码时,它说
模块"材料"未安装
import Material 0.1
我也试过这个,但似乎不起作用:
import "modules/Material" as Material
qml.qrc看起来像这样,qmldir列出了所有文件:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>modules/Material/qmldir</file>
<file>modules/Material/Extras/qmldir</file>
<file>modules/Material/ListItems/qmldir</file>
<file>modules/QtQuick/Controls/Styles/Material/qmldir</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.addImportPath("qrc:/");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
有什么我缺少或是不可能qmldir在qrc文件中使用?
有没有办法隐藏某些项目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手动是坏的表现,所以我需要一个更好的解决方案.你可以帮帮我吗?
在使用C++编写的自定义类型扩展QML时,我开始怀疑JS和C++之间的差异.
这次我想知道,如果nullC++方面的检查是否足够,或者是否有类似QUndefined"我"可能需要考虑的事情.至于我可以看到,这是不是说明这里.
或者换句话说:
undefined在QML端设置属性时,在C++端会发生什么null在QML端设置属性时,在C++端会发生什么null在C++端设置属性时,QML端会发生什么我试图了解如何选择是否使用a QAbstractListModel或QObjecta QQmlListProperty.
鉴于QQmlListProperty处理"角色"功能必须使用QAbstractListModel它来编写,它似乎是不那么乏味的路线.
我不知道大多数人是否建议使用QAbstractListModel仅仅因为它已经存在更长时间或者由于某种原因它是更好的选择.
我也没有找到任何关于两种选择之间权衡的讨论.这个问题是在Qt开发者日讨论讨论期间提出的QAbstractListModel,但答案是"那也行".