2014-01-29 2 views
0

Я пытаюсь настроить мою программу на получение данных из поля ввода в QML, а затем передать эти данные на C++, которые будут использоваться для изменения свойства. Например, если пользователь вводит красный цвет в поле ввода, прямоугольник, содержащий поле ввода, должен быть красным. Данные принимаются в C++, но свойства не изменяются на прямоугольнике.QML/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"); 
} 
}; 

ответ

-1

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

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

  1. Выберите Примеры
  2. Enter «Глава» в поисках
  3. Шесть глав должны быть перечислены
Смежные вопросы