标签: qtquick2

如何在更改模型时停止ListView以"跳转"

我需要做的是:我需要使用存储聊天消息的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.

有人能告诉我出了什么问题吗?或者可能建议另一种解决方案来创建我的消息列表

比你提前!:)

qt listview model qml qtquick2

9
推荐指数
1
解决办法
1433
查看次数

QML垃圾收集删除仍在使用的对象

我曾多次遇到这个问题,动态创建对象,无论它们是用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)

javascript qt garbage-collection qml qtquick2

9
推荐指数
1
解决办法
2151
查看次数

使用Vulkan渲染Qml

我有一个使用Open GL绘制的Qt应用程序。在某些时候,我正在使用与QQuickWindow关联的QQuickRenderControl方法将QML场景绘制到纹理中,以便稍后在最终图像中进行合成。

现在,我正在考虑将OpenGL移植到Vulkan,但不确定在此QML层是否可以这样做。

阅读Qt文档,我发现

QQuickWindow使用OpenGL顶部的场景图进行渲染。

您认为可以将其移植到Vulkan吗?也许是压倒一切的QQuickWindowQQuickRenderControl?我不是Qt专家,所以也许有人可以让我对问题有更好的了解。

qt qml qtquick2 vulkan

9
推荐指数
1
解决办法
1086
查看次数

Qt5 QML错误未安装QtQuick QtGraphicalEffects

在成功编译项目之后,我获得了一个可执行文件.

当我输入./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上运行此应用程序,但结果相同.

有人可以帮忙吗?

qt qml qt-quick qt5 qtquick2

8
推荐指数
1
解决办法
8472
查看次数

QML绑定到数组元素

width在QML上有一个属性,该属性Rectangle是基于另一个具有id mainwindow和以下数组属性之一的Rectangle设置的mainwindow:

width: mainwindow.width/mainwindow.numColsPerRow[positionRow]

这在我的矩形设置时有效; 也就是说,数组中的元素numColsPerRow是正确的.

但是,在设置此Rectangle之后,如果我更改此Rectangle 内numColsPerRow的值width没有任何效果.

QML不允​​许属性绑定到数组元素吗?

qt qml qtquick2

8
推荐指数
1
解决办法
6271
查看次数

在Qt Quick(QML)Flickable中实现缩放/缩放的正确方法

我正在使用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)

zoom scale qml qt5 qtquick2

8
推荐指数
1
解决办法
8050
查看次数

QML屏幕方向锁定

我需要将屏幕锁定到我正在制作的Android应用程序的特定方向.有没有办法在QML中做到这一点?谷歌没有给我任何答案.
我使用的是Qt 5.2.

qt android qml qt5 qtquick2

8
推荐指数
1
解决办法
5510
查看次数

在移动设备上部署C++ QML插件的正确方法是什么?

我一直在使用Box2D QML插件玩很多东西,看起来非常棒.但是,我想在Android(SGS2)上部署我的示例应用程序,但我似乎无法让它工作.无论我是尝试在AVD上还是在设备上运行它,它都不起作用.androiddeployqt成功完成,但后来我得到"无法启动'MyApp'",而没有其他信息,为什么它无法启动.我可以在AVD和设备上成功运行qml应用程序,但这与插件有关,我找不到任何引用来解决它.

我尝试以不同的方式设置DEPLOYMENTFOLDERS,但如果我弄错了,那么整件事就会失败.即使我没有得到错误,在这种情况下我认为我做对了,它仍然无法启动.

我一直在努力安静一段时间,并且找不到任何有用的信息来解决它.如果您知道任何使用c ++插件并且可以在Android设备上成功部署的项目,那也会很好.

我正在使用为Android编译的Qt 5.2.0和box2d的qt5分支

qt qml qtquick2

8
推荐指数
1
解决办法
3368
查看次数

ListView滚动动画

我想为QML实现滚动动画ListView.这是一个示例图像:
ListView滚动动画
任何人都可以建议我实施这个吗?

谢谢.

animation qt listview qml qtquick2

8
推荐指数
2
解决办法
4万
查看次数

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.

设置height0手动是坏的表现,所以我需要一个更好的解决方案.你可以帮帮我吗?

qt listview qml qtquick2

8
推荐指数
1
解决办法
4773
查看次数