QThread 不能很好地工作

2023-12-03

这是 QTread 的子对象... 并将其具体化在主线程中......

运行时错误如下:

QCoreApplication::sendEvent 中的 ASSERT 失败:“无法将事件发送到 不同线程拥有的对象。当前线程 176f0a8。接收者 ''(类型为“MainWindow”)是在线程 3976a0 中创建的”,文件 c:\ndk_buildrepos\qt-desktop\src\corelib\kernel\qcoreapplication.cpp, 第 405 行 传递给 C 运行时函数的参数无效。无效的 传递给 C 运行时函数的参数。

class PaintThread : public QThread {

private:
    QWidget* parent;

public:
    ~PaintThread() {}

    PaintThread(QWidget* parent = 0) {
        this->parent = parent;
    }

    void run() {
        while (1) {
            this->msleep(5000);
            parent->repaint();
        }
        this->exec();
    }
};

这是 MainFrame 的构造函数:

MainWindow::MainWindow(QWidget *parent) :
QWidget(parent)
{
tankPoint = new QRect(50, 50, 30, 30);

this->show();

PaintThread * pt = new PaintThread(this);
pt->start();
}

以下是主窗口的重写paintEvent

void paintEvent(QPaintEvent*) {
    QPainter  p(this);

    p.setPen(Qt::red);
    p.setBrush(Qt::red);
    p.drawEllipse(*tankPoint);

    tankPoint->setLeft(200);
}

谁能告诉我为什么?


父级(在本例中为您的主窗口)位于不同的线程中。根据Qt文档

您可以随时使用线程安全函数 QCoreApplication::postEvent() 手动将事件发布到任何线程中的任何对象。事件将由创建对象的线程的事件循环自动调度。 所有线程都支持事件过滤器,但限制是监视对象必须与被监视对象位于同一线程中。类似地,QCoreApplication::sendEvent()(与 postEvent() 不同)只能用于将事件分派给调用该函数的线程中的对象.

因此,作为解决方案,我提出以下建议:

  • 在 PaintThread 类中定义一个信号
  • 将此信号连接到 QWidget 子类中的 Paint() 插槽
  • 在 run() 函数中发出它
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QThread 不能很好地工作 的相关文章

  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何改善 Qt5 程序的启动时间?

    我最近切换到 Qt5 我注意到与 Qt4 相比 初始化 QApplication 花费的时间明显更长 大约几分钟 仔细一看 程序似乎把时间花在了这里 Qt5Guid dll QGlobalStatic
  • Qt ObjectName() 必须是唯一的吗?

    如标题所示的简单问题 如果我打电话setObjectName 在一个对象上 它是否必须是唯一的 或者只是因为约定而推荐 我已经子类化了QLabel 并希望自动为创建的对象命名 如果这是一个坏主意 我会找到一些设置随机唯一名称的方法 我实际上
  • 将 QMAKE_CXXFLAGS += -std=c++11 添加到 qt 中的 .pro 文件不起作用(在 linux 12.04 上)

    编译器输出 main o 错误 1 cc1plus 错误 无法识别的命令行选项 std c 11 解决方案是更新系统上的旧 gcc 版本 事实上 我很惊讶你的 12 04 Ubuntu 变体上有这么旧的版本 默认情况下应该有 4 6 3 您
  • 错误:命名空间“std”中没有名为“enable_if_t”的模板;您的意思是“enable_if”吗?

    我正在 macOS 10 13 6 上使用 Qt 5 11 3 进行编译 Qt使用的clang版本是 Applications Xcode app Contents Developer Toolchains XcodeDefault xct
  • 如何在 PySide/PyQt 中制作一个位于屏幕中央的小部件?

    这段代码有效 但我想知道是否有更简单的方法 def center self qr self frameGeometry cp gui QDesktopWidget availableGeometry center qr moveCenter
  • 如何搭建qtwayland?

    我花了一整天的时间尝试使用QtWayland Compositor 1 0在 Qt 创建者中 我已经遵循了从那里开始的所有步骤https wiki qt io QtWayland https wiki qt io QtWayland但我收到
  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • QGraphicsScene没有删除QWidget的功能

    QGraphicsScene 有一个addWidget QWidget 有函数 但是没有对应的removeWidget QWidget 它只有removeItem QGraphicsItem 如何删除 QWidget 这是一个基本示例 看看
  • 获取 QPushButton 在 2D 数组 QPushButton 上的索引

    我有一个二维数组QPushButton 当用户单击按钮时如何获取按钮的索引 例如当用户单击按钮时a 2 3 它会显示 2 3 该示例如下所示 Qt 4 5 使用对象名称 您可以为按钮指定唯一的对象名称 理想情况下 名称应该是有效的 C 标识
  • SWI-Prolog 与 C++ 接口的问题

    我试图让 SWI Prolog 与 C 很好地配合 现在束手无策 现在 在我开始准确解释我的问题是什么之前 我想首先说明我的项目是关于什么的以及我选择了哪些工具来开发解决方案 我的教授分配给我的任务是开发一个 GUI 程序 作为 SWI p
  • 如何在 QT 中绘制点?

    我正在用 QT 用 C 编写一个应用程序 其中有 n 个点并计算它的凸包 然而 一旦计算出来 我不知道如何绘制点并绘制船体的边界 制作菜单按钮等很简单 但我不确定我是否知道执行此操作的工具 你怎么做到这一点 图形视图 addEllipse
  • 打开和关闭附加窗口 (QML)

    目前我有一个通过以下方式打开的窗口 property variant win Button id testButton MouseArea onClicked var component Qt createComponent test qm
  • Qt5和QML:如何使用WebEngine Quick Nano浏览器自动输入用户名和密码

    我正在使用编写一个小应用程序Qt and QML使用 Qt 文档中的示例WebEngine Quick Nano 浏览器 https doc snapshots qt io qt5 5 9 qtwebengine webengine qui
  • Qml 和模糊图像

    我想使用 QML 实现模糊效果 我找到了有关 效果 模糊 的参考资料 例子 http qt gitorious org lscunha qt components lscunha qt components blobs d78feec567
  • 如何在 Qt Creator 中编辑 QtWebKit 的右键上下文菜单?

    好吧 这是我的困境 我正在使用 Qt Creator 制作一个使用 Webkit 的简单应用程序 我认为 Qt Creator 会有一种简单的方法来使用信号和槽编辑器编辑右键单击上下文菜单 但事实证明这不是真的 我知道 webkit 有与上
  • QComboBox 下拉项边距

    我想设计我的风格QComboBox为下拉项目留出边距 现在是这样的 我想要这样的东西 我尝试过 QComboBox QAbstractItemView item margin 3px 但它不起作用 你能帮我解决这个问题吗 您想在项目之间设置
  • new 运算符(以及 malloc)无法分配约 450 MB 的内存 [重复]

    这个问题在这里已经有答案了 我正在开发一个程序 该程序在内存中存储大约 2 2 亿个短值的数组 该数据块的分配方式如下 short arrayName new short SIZE OF ARRAY 然后将文件的内容读入内存 在团队中的另一
  • QMutex 是否需要是静态的,以便此类实例的其他线程调用知道暂停其操作?

    从多个线程调用以下附加函数 我不希望数据重写附加 因为计数器尚未增加 除了当前使用 Append 的线程之外 这是否会挂起所有进入的线程 或者其他线程会继续运行而不追加数据吗 互斥锁是否需要是 静态 的 或者每个实例都知道要暂停操作吗 如果
  • 在没有加载器的情况下实例化内联组件

    有没有办法实例化内联Component 即在同一文件中定义 而不使用Loader 我不太关心使用的性能影响Loader因为我要用很多东西污染我的文件Loader包装纸 我发现从 JavaScript 创建动态 QML 对象 http doc

随机推荐

  • 在多个屏幕上投放 iAd

    我确信这个问题有一个简单的答案 但现在它开始让我烦恼 我的应用程序中集成了一个 iAd 它在我实现它的屏幕上显示并工作 该应用程序使用 NavigationController 在多个屏幕之间移动 但 iAd 仅在其中一个屏幕上 从头到尾浏
  • 当路径指向 JAR 文件内部时,将 SUBREPORT_DIR 传递给子报表 [Jasper Reports 4.5]

    我在通过时遇到问题SUBREPORT DIR我的子报告的路径 这些报告实际上位于同一文件夹中 但位于 JAR 文件内 我尝试过这样的事情 可能不准确 parameterList new HashMap
  • NSCountedSet 上的 KVO?

    我想监视 NSCountedSet 以查看其内容是否发生变化 设置 KVO 似乎可以编译 但没有被触发 第一个问题 你能观察一个集合吗 如果是这样 那么这条消息有什么问题吗 subViewA addObserver subViewB for
  • Python 读取文件直到匹配,读取直到下一个模式

    Python 2 4 3 我需要通读一些文件 可能大到10GB 我需要它做的是遍历文件直到它与模式匹配 然后打印该行及其后面的每一行 直到它与另一个模式匹配 此时 继续读取文件 直到下一个模式匹配 例如 文件包含 Alpha Zeta te
  • 创建自定义呼叫处理应用程序

    您好 我正在寻找创建一个自定义呼叫应用程序 即我想替换默认的应用程序处理调用 S 我确定我想重新发明轮子有时当前的轮子对我来说并不好 你能把我放在启动线上吗 我曾经是一位已婚的 M net 开发人员 我爱上了 Google 正如 Emman
  • 在 Zend Framework 2 中访问 MySQL 存储过程输出

    我有一个简单的 MySQL 存储过程 它接受两个参数并向表中插入一行 我可以从 Zend Framework 2 中很好地执行它 如下所示 result this gt dbAdapter gt query CALL sp register
  • 将 STL 与 Alchemy 结合使用

    虽然Alchemy支持编译C 但使用STL似乎很麻烦 主要是由于std string 的问题 奇怪的是炼金术好像用的是GNU libstdc v3 4 6 很难相信 std string 在 GNU 的 STL 中被破坏了 有没有人想出解决
  • C# 如何获取具有时间跨度的音频分贝值

    如何获取每 1 秒的 wav mp3 文件的分贝值 使用任何适用于 C 的音频库 就像是 Time 0 DB 0 213623 Time 1 DB 0 2692261 Time 2 DB 0 2355957 Time 3 DB 0 2363
  • WCF服务客户端:内容类型text/html;响应消息的 charset=utf-8 与绑定的内容类型不匹配

    我的本地 IIS 服务器上正在运行 WCF 服务 我已将其添加为 C 网站项目的服务引用 它添加得很好并自动生成代理类 但是 当我尝试调用任何服务合同时 出现以下错误 描述 期间发生未处理的异常 执行当前的网络请求 请查看堆栈跟踪以了解更多
  • 在 laravel 5.2 中由另一个用户(管理员)注销用户

    假设当前有三个用户从三个设备登录 其中一个用户 管理员 想要强制注销 user2 在 laravel 5 2 中如何实现 数据库表结构 users gt id name email password remember token Updat
  • 按镜像名称删除容器

    我错误地创建了一堆容器 现在我想将其删除 我可以列出它们 docker container ls aq f ancestor portainer portainer 我怎样才能将这些容器ID 管道 到docker container rm
  • xs:unique如何实现到属性中?

    我想在 XML 文件中传递乘客列表中每个属性的唯一性 我的 xml 文件如下所示
  • 如何在android中维护微调器状态[重复]

    这个问题在这里已经有答案了 我正在做一个 Android 应用程序 它可以从网络服务获取数据并将其加载到微调器中 当我进入某个屏幕并返回时 我需要维护微调器的选定数据状态 例如 如果我从网络服务获取数据1 apple 2 orange 3
  • 无法调用非静态方法[重复]

    这个问题在这里已经有答案了 我正在尝试使用这个wavRead filename 但我收到消息cannot make a static reference to a non static method 我可以简单地将其设为静态并解决我的问题
  • iOS防止tableview的子视图随tableview滚动

    我已在表视图中添加了一个子视图 当用户滚动表视图时 子视图也会随之滚动 我该如何防止这种情况 我知道这可能与不将视图添加到表视图的子视图类似 但我不知道有任何其他方法可以做到这一点 谢谢 如果你想让一个视图成为表视图的子视图 那么你可以通过
  • 无法识别的选择器发送到实例

    XCode 再次 让我发疯 人们如何使用这个 UIViewController look for offer unrecognized selector sent to instance 0x4e34220 2011 04 30 18 38
  • 如何检测 Android 上的辅助功能设置是否启用/禁用

    我特别感兴趣high contrast text color correction and magnification设置 我在网上做了一些研究 找不到我想要的 我看到一个关于检测的答案high contrast text Accessib
  • 在 MATLAB 中计算 FFT 图下的面积

    目前 我对一组数据进行了 FFT 得到了 x 轴上的频率和 y 轴上的幅度的图 我想计算图表下方的面积来给我能量 我不确定如何确定面积 因为我没有方程 而且我只想要图的某个区域而不是图下的整个区域 我有办法做到吗 使用 Matlab 进行数
  • jupyter笔记本中没有python终端

    Attached a screenshot of the error I have tried creating python 3 and python2 virtualEnv but nothing is working Any help
  • QThread 不能很好地工作

    这是 QTread 的子对象 并将其具体化在主线程中 运行时错误如下 QCoreApplication sendEvent 中的 ASSERT 失败 无法将事件发送到 不同线程拥有的对象 当前线程 176f0a8 接收者 类型为 MainW