1. 程式人生 > >qt中按鈕中佈局其他的label,然後通過QCursor檢測滑鼠位置傳遞objectname的問題

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才能起到作用。