2016-02-23 1 views
0

я есть класс вроде этого:Как передавать данные с сигналом/слотом из одного объекта QObject в другой объект QQuickItem в qml?

class MyClass : public QObject 
{ 
    Q_OBJECT 
public: 
    CircularList<unsigned char> buffer_[2]; 

    explicit MyClass(QObject *parent = 0); 

signals: 
    void dataReady(short *buff,int len); 
}; 

, а другой является:

class WaveItem:public QQuickItem 
{ 
    Q_OBJECT 
public: 
    WaveItem(QQuickItem *parent = 0); 

public slots: 
    void setSamples(short *buff,int len); 

protected: 
    QSGNode * updatePaintNode(QSGNode *node, UpdatePaintNodeData *data); 
}; 

мне нужно подключить этот класс в QML с сигналом (dataReady)/слот (setSamples). как это возможно?

+0

заключается в том, что 'SerialManager' будет удален от потока пользовательского интерфейса i.e,' moveToThread() 'used? – ramtheconqueror

+0

нет, что это? –

+0

Вы подклассифицируете 'QThread'? 'SerialManager' предполагает, что вы контролируете некоторые последовательные порты (' QSerialPort'). Если это так, знаете ли вы, что вы можете использовать последовательный порт, управляемый событиями, который будет легко реализовать и не потребует потоков. – ramtheconqueror

ответ

0

Если вы проверите qt docs около exposing signals, это очень хорошо описывает.

Во-первых, вам понадобится register ваш класс, основанный на QObject, для двигателя QML.

qmlRegisterType<Myclass>("MyclassLib", 1, 0, "Myclass"); 

Таким образом, вы можете создать Myclass объекты в QML. Но если вы хотите, чтобы создавать объекты в C++ и использовать этот конкретный объект в QML, то вам нужно использовать QQmlContext::setContextProperty

QQuickView view; 
Myclass myClass; 
view.engine()->rootContext()->setContextProperty("myclass", &myClass); 

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

Myclass { 
    onDataReady: waveItem.setSamples(buff, len); 
} 

В качестве альтернативы, вы можете также использовать connect(),

Myclass { 
    id: myClass 
    Component.onCompleted: myClass.dataReady.connect(waveItem.setSamples); 
} 

Примечание: Вы можете также обратиться к Connections.

 Смежные вопросы

  • Нет связанных вопросов^_^