Qt - 信号槽中的参数

lie*_*ewl 4 qt signals-slots

我有一个QPushButton,QDateEdit和另一个自定义对象.我想将按钮连接到日期编辑对象,当我单击按钮时,日期编辑对象将其设置日期更改为自定义对象上定义的日期.有点像:

connect(pushbutton,SIGNAL(clicked()),dateedit,SLOT(setDate(custom_object.getDate())));
Run Code Online (Sandbox Code Playgroud)

但我做不到.显然,connect语句没有指定从信号传递到插槽的信息是什么,只是传递信息的类型.有没有办法在不必创建新类的情况下执行此操作?

Kal*_*son 5

创建包含该功能的包装函数通常是最简单的.换一种说法:

connect(pushbutton, SIGNAL(clicked()), SLOT(setDateFromCustomObject()));
Run Code Online (Sandbox Code Playgroud)

然后,在调用connect的同一个类中:

void YourClass::setDateFromCustomObject() {
  dateEdit->setDate(custom_object.getDate());
}
Run Code Online (Sandbox Code Playgroud)

通过使用名为Qxt的外部库,可以使用特定参数和对象进行连接时绑定.它看起来不像他们的文档是完整的或最新的,但它们确实提供了一些不错的功能.我认为它只适用于高级用户.

  • @Adam W - 实际上,我认为添加对运行时绑定的支持没有任何问题,也没有看到它会如何影响耦合.消息传递架构不会改变,而Qt只会获得一些数据注入支持.另一方面,它混淆了连接发送器和接收器以及数据绑定的概念.它也会使调试复杂化.尽管如此,如果可以的话,我绝对会使用它.在一行中,连接调用,我将确切地知道绑定和注入的内容. (2认同)