Qt: qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写
Qt,qobject_cast,sender,简化,信号与槽2016-08-07
当你觉得写代码是一件重复性极高的工作时,这时你就应该考虑换个方式来实现了。
提高代码效率,减少代码量。
void Widget::onClicked() { QPushButton* button = qobject_cast<QPushButton*>(sender()); QRadioButton* radio = qobject_cast<QRadioButton*>(sender()); if (button) { QString text = button->text(); ui->label_2->setText(text); } else if(radio) { QString text = radio->text(); ui->label_2->setText(text); } }
private slots: void onClicked();
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(onClicked())); connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(onClicked())); connect(ui->pushButton_3,SIGNAL(clicked(bool)),this,SLOT(onClicked())); connect(ui->pushButton_4,SIGNAL(clicked(bool)),this,SLOT(onClicked())); connect(ui->radioButton,SIGNAL(clicked(bool)),SLOT(onClicked())); connect(ui->radioButton_2,SIGNAL(clicked(bool)),SLOT(onClicked())); connect(ui->radioButton_3,SIGNAL(clicked(bool)),SLOT(onClicked())); connect(ui->radioButton_4,SIGNAL(clicked(bool)),SLOT(onClicked()));
void Widget::onClicked() { QPushButton* button = qobject_cast<QPushButton*>(sender()); QRadioButton* radio = qobject_cast<QRadioButton*>(sender()); if (button) { QString text = button->text(); ui->label_2->setText(text); } else if(radio) { QString text = radio->text(); ui->label_2->setText(text); } }
当然了,这里我只是举个例子,在实际的应用中大家可以扩展其功能的。