zoukankan      html  css  js  c++  java
  • 在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)

    在Delphi里我记得是使用TThread.Synchronize(TThreadMethod),原理是利用了一个隐藏窗口来处理。

    在QT Debug模式一下,碰到了同样的问题,显示错误:

    cannot send events to objects owned by a different thread

    解决方案是使用信号槽,就是在线程里不断的发信号,UI线程的槽函数不断的接受信号并做处理:

    So as a solution I would propose the following:

    • Define a signal in your PaintThread class
    • connect this signal to the paint() slot in QWidget subclass
    • Emit it in the run() function

    参考:http://stackoverflow.com/questions/9018434/qthread-doesnt-work-well

    或者使用:

    int ThreadTest::showProgress(int percent, void *pContext)
    {
    // instead of: someOtherQObject->updateProgress(percent);
    QMetaObject::invokeMethod(someOtherQObject, // obj
    SLOT(updateProgress(int)), // member
    Qt::QueuedConnection, // connection type
    Q_ARG(int, percent)); // val1

    //qDebug() << "Progress: " << QString::number(percent);
    return 0;
    }

    https://forum.qt.io/topic/9119/solved-how-can-i-evade-the-error-cannot-send-events-to-objects-owned-by-a-different-thread/4

  • 相关阅读:
    module.export和export
    netty学习
    I/O知识
    cxf+spring+数字签名开发webservice(二)
    cxf+spring+数字签名开发webservice(一)
    js作用域
    js继承
    js模块和级联
    python全栈_011_Python3基本数据类型--字典
    python全栈_010_Python3基本数据类型--元组
  • 原文地址:https://www.cnblogs.com/findumars/p/4741042.html
Copyright © 2011-2022 走看看