在 QThread 中启动 QTimer

2024-03-22

我正在尝试在特定线程中启动 QTimer。但是,计时器似乎没有执行,也没有打印任何内容。与定时器、槽或线程有关吗?

main.cpp

    #include "MyThread.h"
    #include <iostream>
    using namespace std;

    int main(int argc, char *argv[]) {
        MyThread t;
        t.start();
        while(1);
    }

MyThread.h

    #ifndef MYTHREAD_H
    #define MYTHREAD_H

    #include <QTimer>
    #include <QThread>
    #include <iostream>

    class MyThread : public QThread {
        Q_OBJECT
    public:
        MyThread();
    public slots:
        void doIt();
    protected:
        void run();
    };

    #endif  /* MYTHREAD_H */

MyThread.cpp

    #include "MyThread.h"

    using namespace std;

    MyThread::MyThread() {
        moveToThread(this);
    }

    void MyThread::run() {
        QTimer* timer = new QTimer(this);
        timer->setInterval(1);
        timer->connect(timer, SIGNAL(timeout()), this, SLOT(doIt()));
        timer->start();
    }

    void MyThread::doIt(){
        cout << "it works";
    }

正如我评论的那样你做错了 https://blog.qt.io/blog/2010/06/17/youre-doing-it-wrong:

  1. 您将保存线程数据的对象与另一个对象混合(负​​责doIt())。他们应该分开。
  2. 不需要子类化QThread在你的情况下。更糟糕的是,你正在超越run方法,而不考虑它在做什么。

这部分代码应该足够了

QThread* somethread = new QThread(this);
QTimer* timer = new QTimer(0); //parent must be null
timer->setInterval(1);
timer->moveToThread(somethread);
//connect what you want
somethread->start();

现在(Qt版本> = 5)默认情况下QThread在其中启动一个事件循环run()方法。为了在线程内运行,您只需移动对象即可。阅读文档... https://doc.qt.io/qt-6/qthread.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 QThread 中启动 QTimer 的相关文章

  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • C# Winforms Designer 无法打开,因为它无法在同一程序集中找到类型

    我收到以下错误 找不到类型 My Special UserControl 请确保引用包含此类型的程序集 如果此类型是您的开发项目的一部分 请确保已使用当前平台或任何 CPU 的设置成功构建该项目 但没有任何意义的是My Special Us
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • “没有合适的默认构造函数可用”——为什么会调用默认构造函数?

    我已经查看了与此相关的其他一些问题 但我不明白为什么在我的情况下甚至应该调用默认构造函数 我可以只提供一个默认构造函数 但我想了解它为什么这样做以及它会产生什么影响 error C2512 CubeGeometry no appropria
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 编写具有多种类型的泛型扩展方法时的类型推断问题

    我正在为 IEnumerable 编写一个通用扩展方法 用于将对象列表映射到另一个映射对象列表 这就是我希望该方法的工作方式 IList
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • WinForms - 加载表单时如何使用 PaintEventArgs 运行函数?

    我试图理解图形 在 Graphics FromImage 文档中 它有这样的示例 private void FromImageImage PaintEventArgs e Create image Image imageFile Image
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • 当 Verb="runas" 时设置 ProcessStartInfo.EnvironmentVariables

    我正在开发一个 C 应用程序 我需要创建变量并将其传递给新进程 我正在使用ProcessStartInfo EnvironmentVariables 新进程必须提升运行 因此我使用 Verb runas var startInfo new
  • 初始化列表在 VC10 中不起作用

    我在 VC 2010 中编写了这个程序 class class1 public class1 initializer list
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自

随机推荐

  • 使用正则表达式设置任何字符的最小/最大字符数

    我正在尝试编写一个正则表达式 用于文本框来验证其内容是否在 1 到 35 之间 文本框中的字符可以是任何内容 数字 字母 标点符号 空格等 到目前为止 这是我所拥有的 0 9a zA Z s 1 35 正如你所看到的 我必须列出所有角色 有
  • 使用 TfidfVectorizer scikit-learn 的自定义词汇表时出现问题

    我尝试在 scikit learn 中使用自定义词汇来执行一些聚类任务 但得到了非常奇怪的结果 当不使用自定义词汇表时 程序运行正常 我对集群创建感到满意 不过 我已经确定了一组我想用作自定义词汇表的单词 大约 24 000 个 这些单词存
  • 在不同数据类型之间交替

    我正在尝试解决这个问题 但这真的让我很烦恼 我有一个函数可以将数组或向量转换为复数向量 但是 我不知道该函数如何能够接受双精度数组和双精度向量 我尝试过使用模板 但是 这似乎不起作用 template template
  • 使用 intel pintool 记录所有指令

    我写了这个pintool include pin H include
  • VS2008调试器挂起

    我正在使用带有 SP1 的 Visual Studio 2008 Team System 并且我注意到每当我停止调试应用程序时 IDE 都会挂起几 10 15 秒 这很烦人 起初我以为这只发生在 WPF 应用程序中 但我也观察到了 Wind
  • Android TextView 文本不会居中

    我正在尝试进行 PIN 输入活动 但有一点不太适合我 我无法将文本置于屏幕截图顶部 TextView 的中心 它的工作方式是当用户输入 PIN 时 我将在每个 TextView 中放置一个星号以获取可见的反馈 问题是 我希望星星居中 我尝试
  • Eclipse + Ubuntu 箭头键和退格键不起作用

    我正在使用 Ubuntu 12 10 和 Eclipse Juno 这种情况经常发生 箭头键和退格键在编辑器中停止工作 解决该问题的唯一方法是重新启动计算机 重新启动 Eclipse 没有帮助 有人遇到过这个问题或者知道解决方案吗 谢谢 更
  • 生成签名 apk 任务 app:packageRelease 时出错

    错误 任务 app packageRelease 的配置出现问题 为属性 resourceFile 指定的文件 Volumes Data Android apps NammaKarnataka master app build interm
  • 使用 SessionLoginSample 时特定帐户的 OAuthException 代码 #2

    我们遇到了一个非常奇怪的情况 其中特定的 Facebook 帐户在成功登录后对 https graph facebook com me friends access token XXX 的请求失败 在我们的应用程序中发现这种情况后 我验证了
  • 根据您的最低稳定性设置,该软件包没有足够稳定的版本

    我不太明白 Composer 如何在最低稳定性设置下工作 我有两个包裹 比方说 PackageA and PackageB The composer json文件的PackageA看起来像这样 name vendor packagea mi
  • INNER JOIN 能否提供比 EXISTS 更好的性能

    我一直在研究如何改进一系列过程的性能 最近一位同事提到 他在使用 INNER JOIN 代替 EXISTS 时取得了显着的性能改进 作为调查原因的一部分 我想我会在这里问这个问题 So INNER JOIN 能否提供比 EXISTS 更好的
  • python urllib2文件发送问题

    我想通过 python 将文件发布到服务器 为此我需要将此文件命名为 xmlfile 以便服务器识别输入 import urllib2 url http somedomain to send open test xml read data
  • 在 Backbone 渲染方法中调用 jQuery 插件

    我在 Backbone 中有一个渲染方法 基本上是这样的 render function tmpl this template attrs appendTo this el return this 这是从路由器操作中调用的 action f
  • Azure-runbook 中的 New-PSSession (ARM)

    对于经典门户 ASM 中的 Azure VM 我能够获得 所需的凭据Get AutomationPSCredential and the ConnectionURI with Connect AzureVM ps1 https galler
  • vh 单元行为不一致

    我有一个伪元素 悬停时出现 height 0 4vh 高度不会改变 只有宽度会改变 然而 由于某种原因 在某些条件下 不同伪元素的高度不同 这里的两条深色线都有height 0 4vh 我用这个小提琴来演示 但意识到这种奇怪的情况是否发生取
  • 无法获取已安装模块的绝对路径

    我遇到了一个问题 我认为这与我的 package json 或 cordova 平台的版本有关 当我尝试运行ionic state restore它返回以下输出 Attempting to restore your Ionic applic
  • HTML5代码元素-语言类

    HTML5 code 元素有一个可选的 class language 属性 https html spec whatwg org multipage semantics html the code element定义代码片段的语言 规范中的
  • 像 Uber Android 一样在地图上旋转标记和移动动画

    我正在从事一个类似于 UBER Lyft 或 OLA 的项目 家里的地图上有可用的移动汽车 我正在寻找某种图书馆 它可以让汽车像 UBER 一样顺利移动和转弯 现在 我可以使用下面的代码将汽车从一个经纬度平稳地移动到另一个纬度经度 但棘手的
  • 在 Windows CE 5 上安装我的程序

    我正在完成 Windows CE 5 的应用程序 我想知道在 CE 5 设备上安装该应用程序的最简单方法是什么 在 VS8 中点击 发布 会生成一个安装程序 但该安装程序与 CE 5 不兼容 在 Windows CE 5 上安装应用程序的简
  • 在 QThread 中启动 QTimer

    我正在尝试在特定线程中启动 QTimer 但是 计时器似乎没有执行 也没有打印任何内容 与定时器 槽或线程有关吗 main cpp include MyThread h include