pne*_*zis 10
你不能在Qt版本<Qt 5.
为了使用信号/槽,必须调用元对象编译器.为了实现这一目标,您的课程应满足以下要求:
QObject或任何其他子类(例如QWidget,QPushButton等)Q_OBJECT宏应在类的私有部分,以便使元对象的功能,如狭槽被限定Qt关键字slots,signals以便声明元编译器应将哪些函数作为插槽或信号处理有关更多详细信息,请查看有关元对象系统以及信号和插槽的相应文档页面
另请查看QObject文档:
请注意,
Q_OBJECT对于实现信号,插槽或属性的任何对象,宏都是必需的.您还需要在源文件上运行元对象编译器.我们强烈建议在QObject的所有子类中使用此宏,无论它们是否实际使用信号,插槽和属性,因为如果不这样做可能会导致某些函数出现奇怪的行为.
编辑:从Qt 5开始,functor和lambda表达式可以用作插槽.看到New Signal Slot Syntax in Qt 5
从Qt 5开始,functor和lambda表达式可以用作插槽(如前所述,这里:http://qt-project.org/wiki/New_Signal_Slot_Syntax).
由于我找不到示例代码,我添加了以下内容:
此示例boost::function用于ClassName::classMember()不带参数的类成员.
boost::function<void()> f= boost::bind(&ClassName::classMember, classInstance);
connect(QObjectInstance, &QObject::signalName, f);
Run Code Online (Sandbox Code Playgroud)
当Qt信号和类成员具有参数(例如ClassName::classMember(int))时,boost函数应该如下调整:
boost::function<void(int)> f= boost::bind(&ClassName::classMember, classInstance, _1);
Run Code Online (Sandbox Code Playgroud)
有关boost :: bind的更多信息,请参阅文档:http://www.boost.org/doc/libs/1_55_0/libs/bind/bind.html
| 归档时间: |
|
| 查看次数: |
10244 次 |
| 最近记录: |