在我的用户界面中,我有一个按钮,单击它会添加 QComboBox(带有一些项目)和 QLabel(带有一些文本)。变量“index”是添加的QComboBoxes和QLabels的数量。 “ol”是带有一些数据的 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 的文本将自动更改为其他内容。
我试图通过连接来做到这一点,但是 currentTextChanged()
上的 QComboBox 仅发出具有新值的 QString。有什么方法可以发出对象名称+新值吗?
或者有一些完全不同的解决方案来做到这一点?
最佳答案
在您的插槽内,您可以调用 sender()
获取指向信号发送者的指针。从那里您可以根据 sender()->objectName()
决定下一步做什么。
您还可以考虑在组合框对象上使用 setProperty(...)
来存储指向 QLabel 实例指针 vector 的索引,该 vector 是类成员。然后,您可以通过调用 sender()->property(...)
检索插槽内的索引,并使用它从 vector 访问正确的 QLabel 小部件。
关于c++ - Qt添加 "action"到动态添加的QWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25894722/