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()->objectName()
决定下一步做什么。
您还可以考虑在组合框对象上使用setProperty(...)
来存储指向指向 QLabel 实例的指针向量的索引,该向量是类成员。然后,您可以通过调用sender()->property(...)
来检索槽内的索引,并使用它从向量中访问正确的 QLabel 小部件。
【讨论】:
谢谢,这正是我想要的! 您甚至可以尝试通过将指向 QLabel 的指针直接存储在动态属性中来省略向量,但我自己没有尝试过。但基本上QVariant
应该能够存储指向 QObject 的指针。以上是关于Qt将“动作”添加到动态添加的QWidget的主要内容,如果未能解决你的问题,请参考以下文章