这里我是将按钮里面添加了布局,以使按钮里面的内容能够达到动态变动的效果,但是在进行QCursor传递objectname的时候,发现objectname是空的。
后来才发现qt里面的控件有objectname的很多,像QPushButton,QLable.这里要把button里面布局的控件都加上相同的objectname才能起到作用。废话不多说,直接开鲁。
上代码
for(int i=0;i<manager.name_list.size();i++)
{
QGridLayout *grid_layout = new QGridLayout;
btn_list.insert(i,new QPushButton(this));
btn_list.at(i)->setFixedSize(350,300);
btn_list.at(i)->setFlat(true);
//字号
QFont font(QString::fromLocal8Bit("微软雅黑"),25,60);
QFont font2(QString::fromLocal8Bit("微软雅黑"),16,60);
QLabel *lab_0 = new QLabel(btn_list.at(i));
QLabel *lab_1 = new QLabel(btn_list.at(i));
QLabel *lab_2 = new QLabel(btn_list.at(i));
pixmap.load(":/pic/kefu1.png");
lab_0->setStyleSheet("color:rgb(51,51,51);background:transparent;");
lab_1->setStyleSheet("color:rgb(51,51,51);background:transparent;");
lab_2->setStyleSheet("color:rgb(51,51,51);background:transparent;");
lab_0->setPixmap(pixmap.scaled(200,300));
lab_1->setText(manager.name_list.at(i));
lab_2->setText("3");
lab_1->setFont(font);
lab_2->setFont(font2);
grid_layout->addWidget(lab_0,0,0,3,1,Qt::AlignCenter);
grid_layout->addWidget(lab_1,0,1,1,1,Qt::AlignHCenter | Qt::AlignVCenter);
grid_layout->addWidget(lab_2,1,1,2,1,Qt::AlignHCenter | Qt::AlignVCenter);
btn_list.at(i)->setObjectName(QString("%1manager").arg(i));
lab_0->setObjectName(QString("%1manager").arg(i));
lab_1->setObjectName(QString("%1manager").arg(i));
lab_2->setObjectName(QString("%1manager").arg(i)); //不加上就传不出去
btn_list.at(i)->setLayout(grid_layout);
qDebug()<<"btn_list.at(i)"<<btn_list.at(i)->objectName()<<endl;
if(index == 4)
{
index = 0;
j++;
}
main_layout->addWidget(btn_list.at(i),j,index,1,1,Qt::AlignCenter);
index++;
}
main_layout->setHorizontalSpacing(20);
main_layout->setVerticalSpacing(15);
main_layout->setContentsMargins(100,250,0,20);
this->setLayout(main_layout);
layout_list.push_back(main_layout);
}
这代码是一个按钮里面有3个lable,类似这种

但我进行
int mouse_x = QCursor::pos().x();
int mousu_y = QCursor::pos().y();
QWidget *qwidget = QApplication::widgetAt(mouse_x,mousu_y);//获取鼠标点击的坐标,然后根据坐标获取对应的控件
qDebug()<<qwidget->objectName()<<endl;//打印控件里面objectname
但我发现是空的,后来才知道,用这种方法获取的objectname是对应的按钮点击控件的objectname,由于之前我只设置了button的objectname,所以就一直是空的,这里要把button里面布局的控件都加上相同的objectname才能起到作用。