24-手工创建的组件的信号与槽
2.4.7 手工创建的组件的信号与槽
在界面上还有两个用代码创建的组件,用于设置字体大小的spinFontSize和用于设置字体的comboFont,这两个组件的信号与槽的功能实现显然不能通过前面所述的可视化的方法来实现。
对于手工创建的组件需要手工编写槽函数,并将信号与槽关联起来。
首先,需要确定利用组件的哪个信号来编写响应代码。例如,用于设置字体大小的SpinBox组件最合适的信号是valueChanged(int),用于字体设置的FontComboBox组件适合使用currentIndex Changed(QString)信号。
为此需要在QWMainWind类中定义两个槽函数,以及用于进行信号与槽关联的函数iniSignal Slots(),该函数在构造函数里调用。下面是QWMainWind类中的相关定义(省略了其他代码)。
class QWMainWind : public QMainWindow
{
private:
void iniSignalSlots(); //关联信号与槽
private slots:
// 自定义槽函数
void on_spinBoxFontSize_valueChanged(int aFontSize);//改变字体大小
void on_comboFont_currentIndexChanged(const QString &arg1);//选择字体
};
下面的代码是以上3个函数的实现。
void QWMainWind::iniSignalSlots()
{ //信号与槽的关联
connect(spinFontSize,SIGNAL(valueChanged(int)),
this,SLOT(on_spinBoxFontSize_valueChanged(int)));
connect(comboFont,SIGNAL(currentIndexChanged(const QString &)),
this,SLOT(on_comboFont_currentIndexChanged(const QString &)));
}
void QWMainWind::on_spinBoxFontSize_valueChanged(int aFontSize)
{//改变字体大小的SpinBox
QtextCharFormat fmt;
fmt.setFontPointSize(aFontSize); //设置字体大小
ui->txtEdit->mergeCurrentCharFormat(fmt);
progressBar1->setValue(aFontSize);
}
void QWMainWind::on_comboFont_currentIndexChanged(const QString &arg1)
{//FontCombobox的响应,选择字体名称
QtextCharFormat fmt;
fmt.setFontFamily(arg1); //设置字体名称
ui->txtEdit->mergeCurrentCharFormat(fmt);
}
然后在QWMainWind的构造函数里调用iniSignalSlots()函数,实现手工创建的组件的信号与槽关联。