QML QQuickText:无法锚定到不是父项或兄弟项目的项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QML QQuickText:无法锚定到不是父项或兄弟项目的项目相关的知识,希望对你有一定的参考价值。

当我在我的TumblerColumn中使用Tumbler时,我得到QML QQuickText: Cannot anchor to an item that isn't a parent or sibling,当我单独使用Tumbler时,错误不会出现。我无法弄清楚TumblerColumn有什么问题。

这是我的Dialog代码

import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Dialogs 1.2
import QtQuick.Extras 1.2

Dialog {
    id: customTimerInputDialog
    title: "Custom timer"
    height: 150
    width: 300
    standardButtons: StandardButton.Ok | StandardButton.Cancel
    onAccepted: {

    }

    onRejected: {
        console.log("Rejected")
    }

    Column {
        anchors.fill: parent
        Text {
            text: "Timer"
            height: 40
        }

        Tumbler {
            id: tumbler
            TumblerColumn {
                model: 10
            }

            TumblerColumn {
                model: 60
            }
        }
    }
}

TumblerColumn(TumblerStyle.qml)complete source code

...
// line 294
property Component delegate: Item {
    implicitHeight: (control.height - padding.top - padding.bottom) / tumblerStyle.visibleItemCount

    Text {
        id: label
        text: styleData.value
        color: "#666666"
        opacity: 0.4 + Math.max(0, 1 - Math.abs(styleData.displacement)) * 0.6
        font.pixelSize: Math.round(TextSingleton.font.pixelSize * 1.25)
        anchors.centerIn: parent
    }
}
...

错误消息enter image description here

UPDATE

我和Popup QML Type有同样的错误

Popup {
    id: popup
    x: 100
    y: 100
    width: 200
    height: 300
    modal: true
    focus: true
    closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent

    Tumbler {
        id: intervalPicker
        TumblerColumn {
            model: 10
        }

        TumblerColumn {
            model: 60
        }
    }
}
答案

你正在混合Qt Quick Controls 1和2.在你的Dialog / Popup中导入QtQuick.Controls 2.2QtQuick.Extras 1.2。这两个导入都定义了Tumbler,但Qt Quick Extras中的导入与Qt Quick Controls 1一起使用(参见TumblerStyle.qml中的导入)。

如果你想使用TumblerColumn和TumblerStyle,你必须使用Qt Quick Extras 1.2中的Tumbler。

如果您想使用Qt Quick Controls 2中的Tumbler,您不能使用Qt Quick Extras 1.2中的任何翻转设备。

如果您需要在qml文件中导入Qt Quick Extras 1.2和Qt Quick Controls 2,则需要使用as限定符:

import QtQuick.Extras 1.2 as Extra
import QtQuick.Controls 2.2 as Controls2

...
Extra.Tumbler 
{
...
}

Controls2.Tumbler 
{
...
}
...

以上是关于QML QQuickText:无法锚定到不是父项或兄弟项目的项目的主要内容,如果未能解决你的问题,请参考以下文章

如何将对话框锚定到listview qt qml中的按钮

QML改变项目的高度相对于其下方项目的高度变化

将自定义 UIView 锚定到相对于屏幕大小的屏幕底部

Vue.js 锚定到同一组件内的 div

如何将浮动操作按钮锚定到App ToolBar,就像在指南图像中一样?

将 ImageView 锚定到折叠工具栏