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

  • 相关阅读:
    Proxies
    内置的Symbol值
    css兼容问题大全
    Jquery ajax方法详解
    Ajax笔记
    Jquery笔记
    Css3笔记
    JavaScript学习笔记
    10 款优秀的文件管理插件推荐
    初始化和预装载servlet与JSP页面
  • 原文地址:https://www.cnblogs.com/findumars/p/4741042.html
Copyright © 2011-2022 走看看