Terabaytus
Terabaytus1 июня 2018 г. 5:20

Как из TextField получить текст в слое С++?

QML, qml

Добрый день, подскажите пожалуйста. В слое QML есть TextField  как получить из него данные в С++ при использование данного кода приложение сразу закрывается и пишет в лог

Программа неожиданно завершилась.
Процесс был завершён принудительно.

 import QtQuick 2.9
   import QtQuick.Window 2.2
   import QtQuick 2.6
   import QtQuick.Controls 1.4
   import QtQuick.Controls 2.1


 Window {
id: window
visible: true
width: 300
height: 310
maximumHeight: height
maximumWidth: width
minimumHeight: height
minimumWidth: width
title: qsTr("")

Connections {

    target: backend  

    onSendToQml: {

      console.log("QML " + count); 
    }

} 

  TextField {
                id: textField
                objectName: "sp"
                x: 9
                y: 36
            } 

  Switch {
                id: control
                x: 0
                y: 0
                width: 300
                height: 50
                text: qsTr("")
                checked: false
                onClicked: {

                    backend.setBackend(control);

                }
                contentItem: Text {
                    rightPadding: control.indicator.width + control.spacing
                    text: control.text
                    font: control.font
                    opacity: enabled ? 1.0 : 0.3
                    color: control.down ? "#17a81a" : "#21be2b"
                    elide: Text.ElideRight
                    verticalAlignment: Text.AlignVCenter
                }

                indicator: Rectangle {
                    implicitWidth: 48
                    implicitHeight: 26
                    x: control.width - width - control.rightPadding
                    y: parent.height / 2 - height / 2
                    radius: 13
                    color: control.checked ? "#17a81a" : "transparent"
                    border.color: control.checked ? "#17a81a" : "#cccccc"

                    Rectangle {
                        x: control.checked ? parent.width - width : 0
                        width: 26
                        height: 26
                        radius: 13
                        color: control.down ? "#cccccc" : "#ffffff"
                        border.color: control.checked ? (control.down ? "#17a81a" : "#21be2b") : "#999999"
                    }
                }

                background: Rectangle {
                    implicitWidth: 100
                    implicitHeight: 40
                    visible: control.down /*|| control.highlighted*/
                    color: control.down ? "#bdbebf" : "#eeeeee"
                }
            }

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "backend.h"

 int main(int argc, char *argv[])
 {
   QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

   QGuiApplication app(argc, argv);

   QQmlApplicationEngine engine;

   BackEnd backend;  

  QQmlContext *context = engine.rootContext();

   context->setContextProperty("backend", &backend); 
   engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 
    return -1;

   return app.exec();
 }

#ifndef BACKEND_H
#define BACKEND_H

#include <QObject>
#include <QString>

 class BackEnd : public QObject
  {
  Q_OBJECT

public:
explicit BackEnd(QObject *parent = 0);


signals: 

void sendToQml(int count);

private slots: 
void setBackend(bool control);

public: 

};
 #endif // BACKEND_H

#include "backend.h"
#include <iostream>

   BackEnd::BackEnd(QObject *parent) : QObject(parent)
  {
  }


   void BackEnd::setBackend(bool control) 
 {


   //Найдем строки ввода
    QObject* field1 = this->parent()->findChild<QObject*>("sp");

  //Считаем информацию со строк ввода через свойство text
    QString str1=(field1->property("text")).toString();

 //  std::cout << str1 << std::endl ;

  }



Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

3
Terabaytus
  • 1 июня 2018 г. 5:24

уточню что в функции

void BackEnd::setBackend(bool control) 
есть условие

  void BackEnd::setBackend(bool control) 
 {

if(control) {
   //Найдем строки ввода
    QObject* field1 = this->parent()->findChild<QObject*>("sp");

  //Считаем информацию со строк ввода через свойство text
    QString str1=(field1->property("text")).toString();

 //  std::cout << str1 << std::endl ;
   }

  }
    Evgenii Legotckoi
    • 1 июня 2018 г. 11:13
    • Ответ был помечен как решение.

    Добрый день!

    А почему бы Вам просто не передавать значение текста из TextField сразу в сигнал setBackend. Это же будет гораздо проще.
    К тому же все эти findChild конкретно утежеляют и усложняют логику работы программы. Я бы старался такого избегать.

    cpp
    void BackEnd::setBackend(bool control, QString text) 
    {
        if(control) {
            std::cout << text << std::endl ;
        }
    }
    qml
    onClicked: {
        backend.setBackend(control, textFiled.text);
    }
      Terabaytus
      • 2 июня 2018 г. 8:05
      • (ред.)

      Согласен с вами, но видимо не всё так просто сейчас Qt ругается на

      no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘QString’)     std::cout << "C++ "<< text << std::endl ;
      а если его за комментировать то пишет

      ReferenceError: textField is not defined


        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь
        AD

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:50баллов,
        • Очки рейтинга-4
        m
        • molni99
        • 26 октября 2024 г. 8:37

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:80баллов,
        • Очки рейтинга4
        m
        • molni99
        • 26 октября 2024 г. 8:29

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:20баллов,
        • Очки рейтинга-10
        Последние комментарии
        i
        innorwall15 ноября 2024 г. 3:03
        Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
        i
        innorwall14 ноября 2024 г. 19:42
        Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
        i
        innorwall14 ноября 2024 г. 17:09
        Qt/C++ - Урок 068. Hello World с использованием системы сборки CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
        i
        innorwall14 ноября 2024 г. 12:05
        EVILEG-CORE. Использование Google reCAPTCHA 2001; 98 29 34 priligy buy
        Сейчас обсуждают на форуме
        i
        innorwall14 ноября 2024 г. 11:39
        добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
        i
        innorwall11 ноября 2024 г. 18:55
        Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
        9
        9Anonim25 октября 2024 г. 16:10
        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
        ИМ
        Игорь Максимов3 октября 2024 г. 11:05
        Реализация навигации по разделам Спасибо Евгений!

        Следите за нами в социальных сетях