2017-11-12 1 views
0

main.cppVerwendung Multi-Thread in C++ und 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 
} 
... 

Wie kann ich das in main.cpp definierte Objekt "d" in einen anderen Thread verschieben? Ich möchte immer noch das Objekt "d" verwenden, ohne es zu ändern.

+0

versuchen Sie dies [link] (https://mayaposch.wordpress.com/2011/11/01/how-to-really-truy-use-qthreads-the-full-explanation/) – JLev

+0

Danke, aber mein Punkt Verwenden Sie das Objekt "d" in qml genau wie "device.bdsugar", weil ich viele Funktionen in der Klasse BlueToothdevice habe. Der Link, den Sie angegeben haben, kann dieses Problem nicht lösen – user8551063

Antwort

0

Definieren Sie Eigenschaften und aufrufbare Methoden in Ihrer Qt-Klasse.

// 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; 

Aber es ist nicht notwendig, das Objekt d auf einem anderen Thread zu bewegen (oder ich habe die Frage nicht verstanden).