Qt将"action"添加到动态添加的QWidget中

Qt adding "action" to dynamically added QWidget

本文关键字:添加 QWidget 动态 action Qt      更新时间:2023-10-16

在我的ui中,我有一个按钮,当点击时,它会添加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++;
}

这很好,在布局中,它们是这样成对的:

Q组合框1 QLabel1

Q组合框2 Q标签2

现在我想更改QComboBox1的值,之后QLabel1的文本将自动更改为其他内容。我试着用connect来实现这一点,但currentTextChanged()上的QComboBox只发出具有新值的QString。有没有办法发出对象名称+新值?或者还有其他完全的解决方案?

在您的插槽中,您可以调用sender()来获取指向信号发送者的指针。在此基础上,您可以根据sender()->objectName()决定下一步要做什么。

您还可以考虑在combobox对象上使用setProperty(...)来存储指向QLabel实例的指针向量的索引,该向量是类成员。然后,您可以通过调用sender()->property(...)来检索插槽中的索引,并使用它从向量中访问正确的QLabel小部件。