【问题标题】:Why does a TextArea with NoWrap always cause an "anchor loop detected" warning?为什么带有 NoWrap 的 TextArea 总是会导致“检测到锚循环”警告?
【发布时间】:2015-07-11 17:29:00
【问题描述】:

为什么TextArea 带有

wrapMode: TextEdit.NoWrap 

总是导致

file:///C:/Qt/5.5/mingw492_32/qml/QtQuick/Controls/ScrollView.qml:340:13:QML 项目:在填充时检测到可能的锚循环。

什么时候运行?

我在 64 位 Windows 7 机器上运行 Qt 5.5,并使用 MinGW 进行编译。

这是我的 QML 代码test.qml

import QtQuick 2.4
import QtQuick.Controls 1.3

ApplicationWindow {
    title: "test window"
    width: 500
    height: 500
    visible: true

    TextArea {
        wrapMode: TextEdit.NoWrap
    }
}

这是我的 C++ 代码main.c

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQml>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/test.qml")));

    return app.exec();
}

即使我将anchors.fill: parent 添加到TextArea,我仍然会收到警告。

作为这个问题的第二部分,这个警告是我应该担心的,还是我可以放心忽略的?

【问题讨论】:

  • 显然这个问题与C++无关,请下次不要在这样的问题上贴c++标签。在这个问题中,您甚至可以删除您的 main.c,因为它只会加载您的 QML,而问题是关于 qml-behaviour。
  • 我是 Qt 新手,不知道启动 qml 文件的方式是否会以某种我不理解的方式影响它。下次我会记得限制我提供的信息。
  • 在这种情况下,您的c++ 不需要。此外,您的问题需要关于QML 的答案,但不是c++。我建议您删除您的c++ 代码 sn-p,有关操作系统和编译器的信息,因为在这种情况下是不必要的。
  • 您的 TextArea 没有指定大小,因此不清楚在这种情况下预期的行为是什么。如果您为 TextArea 分配尺寸或锚点会发生什么?
  • 我想说正在打印的警告是一个错误。它可能不应该发生。

标签: qt qml qtquick2 qqmlcomponent qt5.5


【解决方案1】:

我认为这是 Qt 的错误,您可以忽略它。 创建时,TextArea 有一个 width != 0,即使它是空的。当您输入的文本中 implicitWidth 小于 TextArea 的(默认)width 时,您将收到此警告。

解决方法是在Component.onCompleted 处理程序中分配wrapMode 属性:

Component.onCompleted: wrapMode = TextEdit.NoWrap

【讨论】:

  • 我认为这是一个比width 问题更深层次的问题(即使设置/不设置width 可以极大地影响警告)。无论如何,提交了一个错误 - QTBUG-47167.
猜你喜欢
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多