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

  • 相关阅读:
    Android布局1
    QML 自定义折线图
    QML ChartView 画折线图
    操作系统复习笔记
    Redis的使用
    Git的基本使用
    Python json to excel/csv
    .NET中进行Base64加密解密
    用 IIS 7、ARR 與 Velocity 建设高性能的大型网站
    微信突然出现redirect_uri 参数错误
  • 原文地址:https://www.cnblogs.com/findumars/p/4741042.html
Copyright © 2011-2022 走看看