QML / C ++ Изменить свойство во время выполнения

0

Я пытаюсь настроить свою программу на получение данных из поля ввода в QML, а затем передать эти данные в C++, которые будут использоваться для изменения свойств. Например, если пользователь вводит красный цвет в поле ввода, прямоугольник, содержащий поле ввода, должен быть красным. Данные получены в C++, но свойства не изменяются на прямоугольнике.

Вот мой код. Любая помощь приветствуется.

main.qml

Rectangle{
id: textbox
radius: 15.0
height: 300
width: 300
color: "white"
border.color: "lightblue"
border.width: 5
signal qmlSignal(string msg)
property alias textColor: colorText.color

TextInput
{
    id: inputText
    anchors.horizontalCenter: textbox.horizontalCenter
    anchors.verticalCenter: textbox.verticalCenter
    anchors.bottomMargin: 25
    color : "black"
    text : "type something..."
    font.pointSize: 20
    maximumLength: 17
    inputMethodHints: Qt.ImhNoPredictiveText
    selectByMouse: true

    onAccepted: { inputText.focus = false; 
        Qt.inputMethod.hide(); 
        textbox.qmlSignal(inputText.text); 
        console.log(colorText.color) }

 }
}

main.cpp

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <QtQuick>
#include <QObject>
#include <myclass.h>

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/Test3/main.qml"));

QObject *item = viewer.rootObject();

MyClass test;

QObject::connect(item, SIGNAL(qmlSignal(QString)), &test, SLOT(cppSlot(QString)));

viewer.showExpanded();

return app.exec();
}

myclass.h

#include<QObject>
#include<QDebug>
#include<QtQuick>
#include"qtquick2applicationviewer.h"

class MyClass: public QObject
{
Q_OBJECT

public:
MyClass();

public slots:
void cppSlot(const QString &msg)
{
    qDebug() << "Called the C++ slot with message:" << msg;
    QtQuick2ApplicationViewer viewer;
    viewer.setMainQmlFile(QStringLiteral("qml/Test3/main.qml"));

    QObject *item = viewer.rootObject();
    item->setProperty("color", "red");
}
};
Теги:
qt
properties
qml

1 ответ

-1

Чтобы решить вашу проблему, я считаю, что вы захотите ознакомиться с уроками по расширению QML с привязками. В частности, см. Главу 3: Добавление привязок свойств, так как это показывает, как создавать привязки между объектами C++ и QML с использованием макроса Q_PROPERTY.

На самом деле я настоятельно рекомендую вам заполнить все главы для QML, которые поставляются с Qt-установкой Qt Creator. В главах учебников можно получить доступ через страницу приветствия

  1. Выберите примеры
  2. Введите " Глава " в поиске
  3. Шесть глав должны быть перечислены

Ещё вопросы

Сообщество Overcoder
Наверх
Меню