QTimer::timeout 没有触发

2023-12-01

我正在尝试创建一个在我的 Singleton 工作线程中每 n 秒触发一次的事件。信号/槽连接(信号是 QTimer 超时,槽是调用另一个 Singleton 类的 lambda 函数)无法正常工作。连接调用成功,计时器处于活动状态,并且我在控制台上没有收到 QTimer 投诉。如果我尝试打印 QTimer 的剩余时间,它会显示 -1。对于我的一生,我无法弄清楚为什么“超时”永远不会被打印(表明事件正在被触发)。任何帮助将不胜感激。为了简单起见,我们可以假设 OtherSingleton 具有相同的结构。我还应该注意到这个 Singleton 类对象是在 QThread 内部运行的。

单例.h:

#include <QObject>
#include <string>
#include <QTimer>
#include <QThread>

class Singleton : public QObject
{
   Q_OBJECT

public:
    static Singleton& get_instance();

    Singleton(Singleton const&) = delete;
    void operator=(Singleton const&) = delete;

    static void stop_client();

    static void start_client();

private:
    Singleton();

    static QTimer bytes_timer_;

};

单例.cpp:

#include "Singleton.h"
#include <QDebug>
#include <QTime>
#include <QFile>

Singleton::Singleton()
{
    bytes_timer_.setParent(this);
    bytes_timer_.moveToThread(QThread::currentThread());
    bytes_timer_.setInterval(1000);
    qDebug() << "Timeout success:" << connect(&bytes_timer_, &QTimer::timeout, this, [&]() {
        qDebug() << "timeout";
        // . . .
    }, Qt::DirectConnection);
}

Singleton& Singleton::get_instance() {
    static Singleton instance; 

    return instance;
}

void Singleton::start_client() {
    bytes_timer_.start();
}

void Singleton::stop_client() {
     bytes_timer_.stop();
}

QTimer Singleton::bytes_timer_;

主窗口.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QThread>
#include "singleton.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    QThread thread;
    Singleton *s;
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

主窗口.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    s = &Singleton::get_instance();
    s->moveToThread(&thread);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    thread.start();
    s->start_client();
}

主要.cpp:

#include "mainwindow.h"
#include <QApplication>
#include <QThread>
#include "singleton.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

正如官方网站所述,您需要启动计时器

bytes_timer_.start();

https://doc.qt.io/qt-5/qtimer.html#start-1

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

QTimer::timeout 没有触发 的相关文章

随机推荐

  • BCNF分解算法不起作用

    我有以下问题 R ABCDEFG 和 F AB gt CD C gt EF G gt A G gt F CE gt F 显然 B 和 G 应该是键的一部分 因为它们不是依赖集的一部分 此外 BG ABCDEFG 因此是候选键 显然 AB g
  • Webkit CSS 控制输入[type=color] 中颜色周围的框?

    是否有特定于 Webkit 的 CSS 样式 可以让我控制颜色周围的框的颜色 大小 样式input type color 我已经设置了输入的颜色和背景颜色 因此它与我用于旧版 Chrome 和 Firefox 的交叉兼容性填充程序看起来不错
  • NavigationService 何时初始化?

    我想从我的页面捕获 NavigationService Navigating 事件 以防止用户向前导航 我有一个这样定义的事件处理程序 void PreventForwardNavigation object sender Navigati
  • 如何使用 %s 和 %c 正确 printf 字符串和字符

    我对使用感到困惑 c and s在以下 C 程序中 include
  • 从 SQL Server 表中选择扩展属性

    我正在为客户的数据库编写一个简单的 CMS 有 12 个表 他们需要管理其中 4 个表中的所有数据 我设置了一个动态数据项目 Linq to SQL 因为这是我最熟悉的 并且第一页使所有 12 个表都可以按其应有的方式进行编辑 它们位于名为
  • 无效并不是重画屏幕。安卓

    BufferedReader hl new BufferedReader new InputStreamReader getResources openRawResource R raw lines while hl ready showL
  • getDrawable(int id) 已弃用。如何设置图像?

    有一个问题 getDrawable 在 API 22 中已弃用 那么 如果我使用最小 API 16 制作应用程序 如何设置图像 我看到我可以使用 getDrawable int id theme 但这是在 API 21 中添加的 所以我不能
  • 在 D3 的上下文菜单中获取节点详细信息

    我正在尝试获取节点详细信息 id属性 当右键单击时 contextmenu函数被调用 我可以使用获取节点对象var self d3 select this 但我无法计算出 节点的 id 属性 不过我可以在控制台日志中看到它 我打算通过id一
  • CSS 三角形是如何工作的?

    有很多不同的 CSS 形状CSS 技巧 CSS 的形状我对三角形特别困惑 triangle up width 0 height 0 border left 50px solid transparent border right 50px s
  • 纯函数可以返回符号吗?

    这可能有点哲学性 但我认为这是提问的正确地点 假设我有一个创建 ID 列表的函数 这些标识符仅在应用程序内部使用 因此使用 ES2015 是可以接受的Symbol here 我的问题是 技术上 当您请求一个符号时 我想 JS 运行时会创建一
  • 在 Javascript 中查找字符串的所有小写和大写组合

    我正在找这个堆栈溢出问题用 Javascript 来回答 因此 如果我的输入是 word 该函数应该返回 单词 单词 单词 单词 单词 单词 ETC 这是我到目前为止所拥有的 但它只产生排列 不大写任何东西 var perm functio
  • Android 自定义日历视图禁用特定日期

    我是 Android 开发新手 开始开发一个预订应用程序 有一个日历视图 我想禁用该日历中的预订日期 我发现 Android 默认日历中没有禁用功能 那么您能帮我找到一个可以禁用特定日期的良好自定义日历视图吗 我需要资源或图书馆 谢谢你 在
  • 尝试在空对象上调用接口方法“android.media.session.ISessionController android.media.session.ISession.getController()”

    下面的代码是带有使用媒体会话的控件的音乐通知播放器 每当我单击通知中的控件时 它就会崩溃并出现上述错误 请参阅下面的代码 如果我错了 请纠正我 在下面的代码中 我使用媒体会话和广播接收器来构建通知 track 是我所有歌曲数据的模型类 tr
  • 当“display_errors”打开时,为什么此语法错误会返回 HTTP 错误 500?

    给定以下脚本 我得到了预期的 Notice Use of undefined constant error assumed error in htdocs test php on line 8 但如果我在脚本中添加一些东西 I get HT
  • NSXMLParser 从 XML 标签中检索错误数据

    我正在读取带有某些字段的 xml 例如
  • Python lambda 不接受元组参数[重复]

    这个问题在这里已经有答案了 我在两台 PC Linux 和 Windows 上运行带有 PyDev v2 6 插件的 Eclipse SDK v3 6 我想传递一个元组作为参数 例如 foo lambda x y y x print foo
  • Fancybox 导致 IE 加载速度缓慢?

    我正在使用 Fancybox v 1 3 4 在 iframe 中显示视频这一页 Fancybox 和视频显示良好 但问题是 自从添加代码后 我在 IE7 8 中加载网站时遇到了巨大的停顿 类似于这个问题 页面加载后 UI 冻结了 4 5
  • 从故障转储中获取 GDI 句柄计数的命令

    我有一个故障转储 我怀疑 GDI 泄漏是导致崩溃的原因 从完整的故障转储中是否可以找出我的进程崩溃时使用的 GDI 句柄的数量 我创建了一个 Windbg 脚本来转储 GDI 句柄表中的所有 GDI 句柄 看https aloiskraus
  • 构建 Logistic 回归模型时出现“检测到完美分离,结果不可用”

    作为我作业的一部分 我正在构建逻辑回归模型 但在构建模型时出现错误 检测到完美分离 结果不可用 X train year amt spnt rank 1 1 723034 0 418500 0 272727 2 0 716660 2 088
  • QTimer::timeout 没有触发

    我正在尝试创建一个在我的 Singleton 工作线程中每 n 秒触发一次的事件 信号 槽连接 信号是 QTimer 超时 槽是调用另一个 Singleton 类的 lambda 函数 无法正常工作 连接调用成功 计时器处于活动状态 并且我