Terabaytus
Terabaytus1. Juni 2018 05: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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

3
Terabaytus
  • 1. Juni 2018 05: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. Juni 2018 11:13
    • Die Antwort wurde als Lösung markiert.

    Добрый день!

    А почему бы Вам просто не передавать значение текста из 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. Juni 2018 08:05
      • (bearbeitet)

      Согласен с вами, но видимо не всё так просто сейчас 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


        Kommentare

        Nur autorisierte Benutzer können Kommentare posten.
        Bitte Anmelden oder Registrieren
        Letzte Kommentare
        A
        ALO1ZE19. Oktober 2024 18:19
        Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
        ИМ
        Игорь Максимов5. Oktober 2024 17:51
        Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
        d
        dblas55. Juli 2024 21:02
        QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
        k
        kmssr9. Februar 2024 05:43
        Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
        Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
        Jetzt im Forum diskutieren
        J
        JacobFib17. Oktober 2024 13:27
        добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
        JW
        Jhon Wick2. Oktober 2024 01:52
        Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
        КГ
        Кирилл Гусарев27. September 2024 19:09
        Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
        F
        Fynjy22. Juli 2024 14:15
        при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

        Folgen Sie uns in sozialen Netzwerken