Почему TextArea с NoWrap всегда вызывает предупреждение об обнаружении петли привязки?

Почему TextArea с

wrapMode: TextEdit.NoWrap 

всегда вызывает

file:///C:/Qt/5.5/mingw492_32/qml/QtQuick/Controls/ScrollView.qml:340:13: Элемент QML: при заполнении обнаружена возможная петля привязки.

когда я запускаю его?

Я запускаю Qt 5.5 на 64-битной машине с Windows 7 и компилирую с помощью 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, я все равно получу предупреждения.

Что касается второй части этого вопроса, следует ли мне беспокоиться об этом предупреждении или это то, что я могу спокойно игнорировать?


person Community    schedule 11.07.2015    source источник
comment
Очевидно, что этот вопрос не относится к C++, пожалуйста, в следующий раз не ставьте тег c++ на подобные вопросы. В этом вопросе вы можете даже удалить свой main.c, потому что он ничего не делает, кроме как загружает ваш QML, а вопрос касается qml-поведения.   -  person Victor Polevoy    schedule 11.07.2015
comment
Я новичок в Qt и не знал, может ли способ запуска файла qml повлиять на него каким-то образом, которого я не понимаю. В следующий раз я буду помнить, чтобы ограничить информацию, которую я даю.   -  person    schedule 11.07.2015
comment
В этом случае ваш c++ не нужен. Кроме того, на ваш вопрос требуется ответ о QML, но не c++. Я предлагаю вам удалить свой c++ фрагмент кода, информацию об ОС и компиляторе, потому что в данном случае это не нужно.   -  person Victor Polevoy    schedule 11.07.2015
comment
Для вашего TextArea не указан размер, поэтому неясно, каким будет ожидаемое поведение в этой ситуации. Что произойдет, если вы назначите размеры или привязки для TextArea?   -  person MrEricSir    schedule 11.07.2015
comment
@MrEricSir Первоначально у меня было еще несколько вещей, таких как кнопка над ней, а затем я привязал ее слева, справа и снизу от родителя, а верхняя часть текстового поля была привязана к нижней части кнопки, но я все еще получил эту ошибку. Так, например, я попытался удалить все ненужное. Если в одном из моих примеров я добавлю anchors.fill: parent в TextArea, он все равно выдает ошибку.   -  person    schedule 11.07.2015
comment
У меня возникает соблазн сказать, что напечатанное предупреждение является ошибкой... этого, вероятно, не должно происходить.   -  person Mitch    schedule 11.07.2015
comment
Ситуация усугубляется, если вы добавляете текст и выходите за пределы текущего окна просмотра (с установленными width/height или без них). Удаление оскорбительной строки решает проблему. Хм, я согласен с @Mitch об этом. Желаю вам долгих лет жизни и крепкого здоровья, потому что вы нашли ошибку! :)   -  person BaCaRoZzo    schedule 11.07.2015


Ответы (1)


Я думаю, что это ошибка Qt, вы можете ее игнорировать. При создании TextArea имеют width != 0, даже если он пуст. Когда вы вводите текст, у которого implicitWidth меньше, чем (по умолчанию) width из TextArea, вы получите это предупреждение.

Обходной путь заключается в назначении свойства wrapMode в обработчике Component.onCompleted:

Component.onCompleted: wrapMode = TextEdit.NoWrap
person Mido    schedule 12.07.2015
comment
Я думаю, что это проблема глубже, чем проблема width (даже если установка/не установка width может сильно повлиять на предупреждение). Во всяком случае, зарегистрировал ошибку - QTBUG-47167. - person BaCaRoZzo; 12.07.2015