记录一个QT骚搞法-C#中可没有的

先看代码
复制代码
 QTimer *dt = new QTimer(this);
  dt->setInterval(1'000);
  connect(dt, &QTimer::timeout, this, [=] {
    ui->lb_datetime->setText(
        QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
  });

  QMetaObject::invokeMethod(dt, "timeout");
  dt->start();

复制代码

这里得提下QMetaObject::invokeMethod(dt, "timeout"); 意思是立马更新一下UI(UI好没好。。。。。不管)

connect(dt, &QTimer::timeout, this,[=]..) 说下这个,将定时器的触发timeout触发设置一下 --注意呀 无参
然后更新一下UI 启动定时器 看上去没有什么毛病,
写C#写多了立马会反问--为什么不直接调用 dt->timeout
结果一查timeout

public Q_SLOTS:
void start(int msec);

void start();
void stop();


Q_SIGNALS:
void timeout(QPrivateSignal);

看这timeout 是publice呀,但是既然带参数
查看了一些,学习到了 原来是可以信号参数 > 槽参数个数 我还以一直是得相等
后来又发现QPrivateSignal 这个类型是 私有的。。。C#里公开方法的参数类型也得公开
对比如此奇怪可以对外使用connect 来使用timeout,但是又不让你直接对象的方式 dt->timeout
同时&QTimer::timeout C++里的神奇操作(timeout 可是一个私有成员函数)
好吧毕竟是C++ 不是C# 作个记录。


posted @   stweily  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示