c++ - Qt添加 "action"到动态添加的QWidget

标签 c++ qt

在我的用户界面中,我有一个按钮,单击它会添加 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/

相关文章:

c++ - 使用 QT6 在 QVideoWidget 上绘制 QVideoFrame

c++ - 您可以将 QWebView cookies/session 与 QNetworkAccessManager 一起使用吗?

c++ - 调整结构/字符数组的大小(以减少内存使用)

c++ - 在动态内存分配后将整数传递给构造函数

c++ - 远程 GDB 调试

c++ - qmake 到 cmake 转换和链接错误

c++ - QtPainter 错误 Paint 设备返回引擎 ==0,类型 3,Painter 未激活

C++类设计问题

c++ - Qt - 滚动图表的可见区域

linux - Qt 相当于 gtk_init_check