将值传递给自定义QtWidget的最佳方法

时间:2017-02-07 22:42:23

标签: c++ qt

我还在学习C ++和Qt,我想知道在多个元素之间传递值的最佳方法是什么,而不需要建立太多的连接。

目前,我已经设置了一个小工具SamplerModule,其中我放置了许多自定义QPushButtonChordSelector)。 在这个小部件中,我为每个按钮建立了一个连接:

connect(ui->btn_accords_X, SIGNAL(clicked()), ui->btn_accords_X, SLOT(changeChor()));

X0112

目前,当我点击一个按钮时,它只是改变了这个按钮的颜色。但我也想为它设置一个文本,其值在我的SamplerModule类中可用。每次我点击这个按钮,我想返回一个递增的值。

所以我考虑通过3个连接来实现这个目标:

  1. click()(ChordSelector)->change()(ChordSelector)更改按钮颜色并增加我的值,一个女巫指定我的和弦。
  2. newChord(int) (ChordSelector) -> updateChord(int) (SamplerModule)通知我的小部件和弦已被更改
  3. changeText(QString) (SamplerModule) -> setText(QString) (ChordSelector)
  4. 所以这种方式应该可行,但由于我有12个按钮,我需要36个连接来做这个小技巧。 你们有什么建议吗?

1 个答案:

答案 0 :(得分:1)

  1. 如果您使用的是QtDesigner,则QPushButton会有一个名为on_yourButtonName_clicked()的默认广告位。它会自动连接到click()的{​​{1}}信号。这可以保存第一个连接。

  2. QPushButton中按住指向SamplerModule的指针,或者拥有ChordSelector的全局单例实例,以便在SamplerModule中轻松访问它。通过这种方式,你不必使用信号/槽来调用ChordSelector,一个简单的函数调用就可以了。这将保存第二个连接。

  3. 您可以在updateChord(int)的{​​{1}}位置拨打setText(QString),而不是ChordSelector。这将保存第三个连接。