2014-09-17 5 views
0

내 UI에는 클릭 할 때 QComboBox (일부 항목)와 QLabel (일부 텍스트 포함)을 추가하는 버튼이 있습니다. 변수 "index"는 추가 된 QComboBoxes 및 QLabels의 수입니다. "ol"은 일부 데이터가있는 qvector입니다.동적으로 추가 된 QWidget에 QWid를 추가하는 Qt

void MainWindow::on_iAddOtherButton_clicked() 
{ 
    QComboBox *p1 = new QComboBox(this); 
    p1->setObjectName("comboBox"+QString::number(index)); 
    QLabel *p2 = new QLabel(this); 
    p2->setObjectName("othLabel"+QString::number(index)); 
    for(int i = 0; i < static_cast<int>(ol.size()); ++i){ 
     p1->addItem(ol.at(i).getName()); 
     ui->otherLayout->addWidget(p1,index+1,0); 
    } 
    p2->setText(...some text...)); 
    ui->otherLayout->addWidget(p2,index+1,1); 
    index++; 
} 

그리고 이것은 레이아웃에 그들이이 같은 쌍에 잘 작동합니다

QComboBox1 QLabel1

QComboBox2 Qlabel2

지금 나는 QComboBox1의 값을 변경하려면, 그 후 , QLabel1의 텍스트는 자동으로 다른 것으로 바뀝니다. connect를 사용하여이 작업을 시도했지만 currentTextChanged()의 QComboBox는 QString 만 새로운 값으로 방출합니다. 거기에 개체의 이름 + 새로운 가치를 방출하는 몇 가지 방법이 있습니까? 아니면 완전히 다른 해결책이 있습니까?

답변

1

슬롯 내에서 sender()으로 전화를 걸어 신호 발신자에게 포인터를 가져올 수 있습니다. 여기에서 sender()->objectName()을 기반으로 다음에 수행 할 작업을 결정할 수 있습니다.

콤보 박스 객체에 setProperty(...)을 사용하여 클래스 멤버 인 벡터를 사용하여 QLabel 인스턴스에 대한 포인터 벡터에 인덱스를 저장할 수도 있습니다. 그런 다음 sender()->property(...)을 호출하여 슬롯 안의 색인을 검색하고이를 사용하여 벡터에서 올바른 QLabel 위젯에 액세스 할 수 있습니다.

+0

감사합니다. 이것은 내가 찾고있는 것입니다. – user3550149

+0

동적 속성에 직접 QLabel에 대한 포인터를 저장하여 벡터를 생략 할 수도 있지만 직접 시도하지는 않았습니다. 그러나 기본적으로 'QVariant'는 QObject에 대한 포인터를 저장할 수 있어야합니다. – oxygene

관련 문제