在我的ui中,我有一个按钮,单击时会添加QComboBox(带有一些项目)和QLabel(带一些文本)。变量"索引"是添加的QComboBox和QLabel的数量。 "醇"是qvector的一些数据。
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。有没有办法发出对象名称+新值?
或者还有一些其他解决方案可以做到这一点吗?
答案 0 :(得分:1)
在您的广告位中,您可以拨打sender()
以获取指向信号发送方的指针。从那里,您可以根据sender()->objectName()
决定下一步该做什么。
您还可以考虑在组合框对象上使用setProperty(...)
将索引存储到指向QLabel实例的指针向量,其中向量是类成员。然后,您可以通过调用sender()->property(...)
来检索插槽中的索引,并使用它从向量中访问正确的QLabel小部件。