Qt 中的 SLOT 类型是啥?
Posted
技术标签:
【中文标题】Qt 中的 SLOT 类型是啥?【英文标题】:What is the type of SLOT in Qt?Qt 中的 SLOT 类型是什么? 【发布时间】:2016-11-25 07:04:23 【问题描述】:digitButtons[i] = createButton (QString::number(i), SLOT(digitClicked()));
和
Button *Calculator::createButton(const QString &text, const char *member)
Button *button = new Button(text);
connect(button, SIGNAL(clicked()), this, member);
return button;
该代码来自 Qt 文档的计算器示例。
在此文档http://doc.qt.io/qt-4.8/signalsandslots.html 中,我找不到 SLOT 的类型。
哪里提到SLOt是QString?
【问题讨论】:
【参考方案1】:是的,正如 Starl1ght 所述,SLOT 和 SIGNAL 是元对象编译器的宏,这就是它们没有数据类型的原因。
在您提到的示例中,它使用 const char * 因为“SLOT 按名称传递”到连接函数。看看这里http://doc.qt.io/qt-4.8/qobject.html#connect
希望这能简要说明一下什么是信号和插槽。
【讨论】:
【参考方案2】:SLOT 和 SIGNAL 都是 qt MOC 的宏。 它们被简单地定义为:
#define SLOT(a) "1"#a
#define SIGNAL(a) "2"#a
在编译阶段之前,MOC 会找到这些行并使用 c++ 代码生成有效的 .moc 文件,将它们包含在您的项目中,因此信号\插槽应该可以工作。
【讨论】:
以上是关于Qt 中的 SLOT 类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Qt DBus 连接不使用 SLOT 参数中的 typedef
Qt - SIGNAL & SLOT 没有从工人阶级更新我在主窗口中的 QLabel