天天看點

Qt: qobject_cast<QPushButton*>(sender()) 簡化信号與槽的編寫

當你覺得寫代碼是一件重複性極高的工作時,這時你就應該考慮換個方式來實作了。

提高代碼效率,減少代碼量。

代碼片:

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);
    }
 }
           

執行個體:

1、在Qt creator中拖拽出如下界面:

Qt: qobject_cast&lt;QPushButton*&gt;(sender()) 簡化信号與槽的編寫

2、添加槽函數。

private slots:
    void onClicked();
           

3、添加信号與槽的關聯。

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()));
           

4、實作槽函數。

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);
    }
 }
           

5、運作截圖:

Qt: qobject_cast&lt;QPushButton*&gt;(sender()) 簡化信号與槽的編寫

當然了,這裡我隻是舉個例子,在實際的應用中大家可以擴充其功能的。

繼續閱讀