前言

场景:如果QT界面上面有许多按钮,如果一个按钮连接一个信号对应一个槽函数,那么函数太多了,代码结构乱


以下是本篇文章正文内容,下面案例可供参考

一、使用步骤

1.初始化

代码如下(示例):

void MainWindow::InitForm()    //初始化界面
{
    //设置头部区域按钮
    QList<QPushButton *>  pbtns = ui->widg_Heade->findChildren<QPushButton *>();  //找到所有按钮
    foreach(QPushButton *btn, pbtns)  //循环List中所有的按钮
    {
        qDebug()<<btn;
//        btn->iconSize(32,32);
//        btn->setCheckable(true);
        btn->setChecked(true);
        connect(btn,SIGNAL(clicked()),this,SLOT(buttonClick()));  //每一个按钮连接槽函数
    }
}

2.槽函数

代码如下(示例):

void MainWindow::InitForm()    //初始化界面
{

    //设置头部区域按钮
    QList<QPushButton *>  pbtns = ui->widg_Heade->findChildren<QPushButton *>();  //找到所有按钮
    foreach(QPushButton *btn, pbtns)  //循环List中所有的按钮
    {

        qDebug()<<btn;
//        btn->iconSize(32,32);
//        btn->setCheckable(true);
        btn->setChecked(true);
        connect(btn,SIGNAL(clicked()),this,SLOT(buttonClick()));  //每一个按钮连接槽函数
    }
}


void MainWindow::buttonClick()  //电机按钮的槽函数
{
    qDebug()<<"进入槽函数";
    QPushButton *bt = (QPushButton *)sender();  //返回这个发射信号控件指针
    QString name = bt->text(); //获取控件文本
    QList<QPushButton *>  pbtns = ui->widg_Heade->findChildren<QPushButton *>();  //找到所有按钮
    foreach(QPushButton *btn, pbtns)
    {
        if(btn == bt)
        {
            btn->setChecked(true);
        }
        else{
            btn->setChecked(false);
        }
    }
    if(name=="主界面")
    {
        ui->stackedWidget->setCurrentWidget(ui->stack_main);  //显示主界面
    }else if(name=="TL系统"){
        ui->stackedWidget->setCurrentWidget(ui->stack_tl);  //显示主界面
    }
}

总结

这里面有一个小问题要注意,在我连接槽函数时候 connect(btn,SIGNAL(clicked()),this,SLOT(buttonClick())); clicked()缺少了(),结果可以编译通过,但是槽函数一直进入不了,我qDebug()以后发现出现这个问题这里就是缺少(),添加以后槽函数可以正常使用 Parentheses expected, signal QPushButton::clicked in
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐