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 docs的计算器示例。
在这篇文档http://doc.qt.io/qt-4.8/signalsandslots.html中,我找不到SLOT的类型。
在哪里提到SLOt是QString?
答案 0 :(得分:3)
SLOT和SIGNAL都是qt MOC的宏。 它们的定义简单如下:
#define SLOT(a) "1"#a
#define SIGNAL(a) "2"#a
在编译阶段之前,MOC会找到这样的行并生成带有c ++代码的有效.moc文件,将它们包含在你的项目中,因此,signal \ slots应该可以工作。
答案 1 :(得分:3)
是的,如Starl1ght SLOT 和 SIGNAL 所述,是元对象编译器的宏,这就是他们没有数据类型的原因。
在您提到的示例中,它使用 const char *因为“SLOT按名称传递”到连接函数。看看http://doc.qt.io/qt-4.8/qobject.html#connect
希望这能简单地澄清一下SIGNALS和SLOTS。