记录一个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# 作个记录。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南