QT中批量操作QPushButton,创建、获取、连接槽函数。
先看一下最终效果是不是你想要的。
这里批量创建了128个按键,连接到同一个函数中,用索引的方式获取按键动作。每一个按键可以有按下的效果。
看代码,都有比较详细的注解。
创建部分:
//创建DO按键128个 一行8个,一共16行 8*16=128
for (int i=0;i<16;i++)//DO
{
for(int j=0;j<8;j++)
{
//按键名称是 通道1~128,使用QString::asprintf ui->frame是建立好的一个容器用来确认在窗口中的位置
QPushButton *bt = new QPushButton(QString::asprintf("通道%d", i*8+j+1), ui->frame);//
bt->setGeometry(100+j*100+j*100, i*10+i*40, 100, 40); //4个参数是(X坐标,Y坐标,按键的宽度,按键的高度)
connect(bt,&QPushButton::clicked,[=](){BT_128(i*8+j);});//连接到一个函数,函数的参数就是“按键索引”
}
}
int PushButton_number = ui->frame->children().count();//获取创建了多少个按键
qDebug()<<"PushButton_number"<<PushButton_number;//打印出来
槽函数的部分
void Data_Test_Calibration::BT_128(int N)
{
//static bool DO_Table[128];
//一个记录状态的数组
DO_Table[N] = !DO_Table[N];
//获取所有的按键
QPushButton *bt = (QPushButton *)(ui->frame->children().at(N));
qDebug()<<bt->text();//打印按下的按键名称
if(DO_Table[N])//按键动态变化
bt->setStyleSheet("QPushButton{background-color:green;color:white;}");
else
bt->setStyleSheet("");
}