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