2017-11-12 9 views
0

MAIN.CPP를 사용하여 C++로 멀티 스레드 및 QML

int main(int argc, char* argv[]) 
{ 
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 
    QGuiApplication app(argc,argv); 
    QQmlApplicationEngine engine; 
    BlueToothdevice d; 

    engine.rootContext()->setContextProperty("device", &d); 
    qDebug()<<"main thread:"<< QThread::currentThreadId(); 
    engine.load(QUrl(QStringLiteral("qrc:/assets/main.qml"))); 
    return app.exec(); 
} 

BlueToothdevice.h

class BlueToothdevice : public QObject { balabalabala } 

BlueToothdevice.cpp

balabalabala 

main.qml

... 
Text { 
    id: bloodglucoseText2 
    text: device.bdsugar 
    font.pixelSize: 6 * dpi 
} 
... 

main.cpp에 정의 된 "d"객체를 다른 스레드로 어떻게 옮길 수 있습니까? 나는 여전히 객체 "d"를 변경하지 않고 사용하고 싶다.

+0

시도해주세요 [link] (https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/) – JLev

+0

고맙지 만 제 요점은 BlueToothdevice 클래스에 많은 함수가 있기 때문에 "device.bdsugar"와 마찬가지로 qml에서 "d"개체를 사용합니다. 부여한 링크로는이 문제를 해결할 수 없습니다. – user8551063

답변

0

Qt 클래스에서 속성과 호출 가능한 메서드를 정의하십시오.

// Define the property bdsugar, accessible from Qml 
Q_PROPERTY(bdsugar READ getBdSugar WRITE setBdSugar NOTIFY on BdSugarChanged) 

// Define the method bdsugar, callable from Qml 
Q_INVOKABLE QString bdsugar(return my_bdsugar;) const; 

그러나 다른 스레드에 객체 D를 이동할 필요가 없습니다 (아니면 내가 질문을 이해하지 않았다).