Terabaytus
TerabaytusМаусым 1, 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


        Пікірлер

        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
        Кіріңіз немесе Тіркеліңіз
        Г

        C++ - Тест 001. Первая программа и типы данных

        • Нәтиже:66ұпай,
        • Бағалау ұпайлары-1
        t

        C++ - Тест 001. Первая программа и типы данных

        • Нәтиже:33ұпай,
        • Бағалау ұпайлары-10
        t

        Qt - Тест 001. Сигналы и слоты

        • Нәтиже:52ұпай,
        • Бағалау ұпайлары-4
        Соңғы пікірлер
        G
        GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
        Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
        d
        dblas5Шілде 5, 2024, 11:02 Т.Ж.
        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
        k
        kmssrАқп. 8, 2024, 6:43 Т.Қ.
        Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
        АК
        Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
        Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
        Енді форумда талқылаңыз
        Evgenii Legotckoi
        Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
        F
        FynjyШілде 22, 2024, 4:15 Т.Ж.
        при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
        BlinCT
        BlinCTМаусым 25, 2024, 1 Т.Ж.
        Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
        BlinCT
        BlinCTМамыр 5, 2024, 5:46 Т.Ж.
        Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
        Evgenii Legotckoi
        Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
        Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

        Бізді әлеуметтік желілерде бақылаңыз