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 所述,SLOTSIGNAL 是元对象编译器的宏,这就是它们没有数据类型的原因。

在您提到的示例中,它使用 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中的signal 和 slot 中带参数问题

QT 中 关键字讲解(emit,signal,slot)

Qt DBus 连接不使用 SLOT 参数中的 typedef

Qt - SIGNAL & SLOT 没有从工人阶级更新我在主窗口中的 QLabel

QT Creator 中的 Slot 信号,connect() 函数在哪里?

没有 SLOT 宏的 Qt 连接