qt中按钮中布局其他的label,然后通过QCursor检测鼠标位置传递objectname的问题

这里我是将按钮里面添加了布局,以使按钮里面的内容能够达到动态变动的效果,但是在进行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才能起到作用。

 


版权声明:本文为qq_36583051原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。