小编Mur*_*aki的帖子

Qt 5.1通过线程的QML属性

出于解决方案的目的,我创建了一个重复我遇到的问题的TestApp.

我将我的软件从Qt 4.8移植到Qt 5.1.

我的第一个程序是多线程的,并且与QML一起工作顺利,只要这些类是线程安全的.但现在我收到这条消息:

QObject::connect: No such slot TestApp::run() in ..\ThreadingTest\main.cpp:21
QQmlEngine: Illegal attempt to connect to TestApp(0x29cfb8) that is in a different thread than the QML engine QQmlEngine(0x2f3e0f8).
Run Code Online (Sandbox Code Playgroud)

这是重现错误的代码:

main.cpp:

#include <QtGui/QGuiApplication>
#include <QQmlContext>
#include <QThread>
#include "qtquick2applicationviewer.h"
#include "testapp.h"

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

    QGuiApplication app(argc, argv);

    QtQuick2ApplicationViewer viewer;

    TestApp * testapp = new TestApp();

    QThread * testappThread;

    testappThread = new QThread();

    QObject::connect(testappThread, SIGNAL(started()), testapp, SLOT(run()));

    testapp->moveToThread(testappThread);

    testappThread->start();

    viewer.rootContext()->setContextProperty("TestApp", testapp);

    viewer.setMainQmlFile(QStringLiteral("qml/ThreadingTest/main.qml"));
    viewer.showExpanded();

    out = …
Run Code Online (Sandbox Code Playgroud)

c++ qt multithreading qml

10
推荐指数
1
解决办法
5126
查看次数

标签 统计

c++ ×1

multithreading ×1

qml ×1

qt ×1