Ваша первая ошибка заключается в том, что вы думаете, что окно, созданное с помощью QQuickView, является тем же, которое создано в main.qml, потому что нет, это 2 разных объекта.
Существует 2 подхода для взаимодействия QML и C ++:
Извлечение ссылок из QML : это подход, который вы хотите реализовать, но у него много неудобств, потому что поиск объекта осуществляется с использованием, например, имени объекта, которое вы не использовали, кроме того, что в сложных структурах его сложно или невозможно получить, кроме того, что многие объекты QML создаются и уничтожаются тем, какой объект вы получаете в другой раз я могу указать на незарезервированную память, плюс есть зависимость кода C ++ от QML, поэтому этот метод не самый лучший и не рекомендуется.
Перенос ссылок на QML : у этого подхода нет проблем, поскольку при экспорте объекта с использованием setContextProperty объект виден во всех QML, поскольку он является глобальным, поэтому, если объект QML создан или его устранение не вызовет проблем, подобных предыдущему методу, нам не нужно имя объекта, и соединение устанавливается так, как если бы объект был создан в QML.
С учетом вышеизложенного я буду использовать второй подход:
main.cpp
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
HandleTextField handleTextField;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("handleTextField", &handleTextField);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
Secondpage.qml [1117 ]
Item{
Connections{
target: handleTextField
onSetTextField: textField1.text = text // <---
}
visible: true
width: 360
height: 360
TextField {
id: textField1
x: 31
y: 169
placeholderText: qsTr("Enter some text...")
}
Button {
x: 193
y: 167
text: qsTr("Uppercase me!")
onClicked: handleTextField.handleSubmitTextField(textField1.text) // <---
}
}
main.qml не следует изменять.
Если вы используете IDLE, а на норвежской клавиатуре возникает клавиша Ctrl- [проблема, вы можете изменить клавишу.
Я попытался вставить Shift-Tab, и это сработало.
Если вы используете IDLE, вы можете использовать Ctrl +]
для отступа и Ctrl + [
для отступа.
Зависит от вашего редактора.
Вы пробовали Shift + Tab?
Shift-Tab
Ctrl-Tab
< key
зависит от вашего редактора.