Qt将“动作”添加到动态添加的QWidget

Posted

技术标签:

【中文标题】Qt将“动作”添加到动态添加的QWidget【英文标题】:Qt adding "action" to dynamically added QWidget 【发布时间】:2014-09-17 15:32:35 【问题描述】:

在我的用户界面中,我有一个按钮,单击时会添加 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。有没有办法发出对象名称+新值? 或者有一些完全其他的解决方案可以做到这一点?

【问题讨论】:

【参考方案1】:

在您的插槽中,您可以调用sender() 以获取指向信号发送者的指针。从那里你可以根据sender()-&gt;objectName()决定下一步做什么。

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

【讨论】:

谢谢,这正是我想要的! 您甚至可以尝试通过将指向 QLabel 的指针直接存储在动态属性中来省略向量,但我自己没有尝试过。但基本上QVariant 应该能够存储指向 QObject 的指针。

以上是关于Qt将“动作”添加到动态添加的QWidget的主要内容,如果未能解决你的问题,请参考以下文章

如何在Qt中动态添加菜单

在 C++ 中的 Qt 中向 UI 动态添加未知数量的按钮

通过 C API 提供 QWidget 的 DLL

QT。向 QLayout 添加新布局

wpf 动态添加控件和使用

将 QWidget 或其他 QWidget 派生控件添加到 QWindow