qt批量操作控件,并设置信号槽

前言

qt中很多情况都需要对控件进行批量操作,又想对容器进行单独操作。如果用代码创建控件,则无法单独拿到控件的对象名,如果在ui文件中拖动创建控件,则无法批量操作。网上查了一些资料,感觉都写的非常繁琐,于是自己尝试写了一下,主要有两种思路



情况一、代码创建控件,对控件批量操作和单独操作,并设置信号槽

思路:使用QVector模板类,将控件添加到容器

代码如下:

	//创建容器
    QVector<QPushButton *> btnList;
    for (int i=0; i<6; i++) {
    
    
        //添加代码创建的按钮
        btnList.push_back(new QPushButton(this));
    }

    //对容器批量操作
    for (int i=0; i<btnList.size(); i++) {
    
    
        btnList[i]->setText(QString("按钮 %1").arg(i+1));
        btnList[i]->move(100,(i+1)*50);
        //设置信号槽
        connect(btnList[i],&QPushButton::clicked,this,[=](){
    
    
            QMessageBox::about(this,"提示",QString("这是按钮 %1").arg(i+1));
        });
    }

你可以使用QVector容器,也可以使用QList列表,使用方法大致一样。在设置信号槽的时候,我们也可以轻易获取该按钮的序号,然后让其跳转到特定的槽。

效果如下:

image-20220607164252978

但ui文件里的控件也可以这样操控,但如果在ui文件中有太多的按钮时,一个个添加也很麻烦,下面看情况二


情况二、ui文件中创建控件,对控件批量操作和单独操作,并设置信号槽

思路:通过父控件来获取内部的按钮控件,将这些空间存入QList或者QVector中,再进行操控

    //获取widget中所有的按钮
	QList<QPushButton *> btnsList = ui->widget->findChildren<QPushButton *>();

	//对容器批量操作
    for (int i = 0; i<btnsList.size(); i++)
    {
    
    
        btnsList[i]->setText(QString("这是按钮 %1").arg(i+1));
        //设置信号槽
        connect(btnsList[i],&QPushButton::clicked,this,[=](){
    
    
            QMessageBox::about(this,"提示",btnsList[i]->text());
        });
    }

注意:按钮在列表中的顺序是以递归方式进行的,目前猜测的顺序是,从左到右,从上到下,左边按钮的名称是我创建的顺序。这一点需要格外注意

image-20220607200052909


码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方,可以评论区交流。

猜你喜欢

转载自blog.csdn.net/weixin_44092851/article/details/125172350