0

所以目前我有代码,在 C++ 中,当从 QComboBox 进行选择时,它会创建一些 QLabel、QLineEdit 和 QCheckBox。但是,如果从组合框中进行了新的选择,我希望能够访问我在以后的函数中创建的小部件以销毁它们。我可以通过执行 ui-> Object来访问使用 Designer 创建的对象,但我无法使用我自己的代码创建的对象来执行此操作。我可以这样做吗,因为我知道如何使用它。

简而言之,我希望能够根据用户所做的选择动态地创建/销毁 QWidget。是否有我应该知道的参考资料或任何文档?还是我只是完全以错误的方式解决这个问题?这是我目前用于创建对象的代码:

   if (eventType == QString::fromStdString("Birthday"))
   {

   QLabel *label1 = new QLabel ("Celebrant: ");
   QLabel *label2 = new QLabel ("Surprise: ");
   QLineEdit *lineEdit = new QLineEdit;
   QCheckBox *box = new QCheckBox;

   ui->gridLayout->addWidget(label1,3,0,1,1, 0);
   ui->gridLayout->addWidget(label2,4,0,1,1,0);
   ui->gridLayout->addWidget(lineEdit,3,1,1,1,0);
   ui->gridLayout->addWidget(box,4,1,1,2,0);

   }
4

3 回答 3

2

好吧,您需要在可以从您想要访问它们的所有代码部分访问的范围内创建变量。最有可能作为您的窗口类的私有属性。

于 2011-02-17T22:25:56.377 回答
2

如果您给他们起名字(使用setObjectName()),您以后可以使用 QObject::findChildren().

但是将它们存储在成员变量中不是更容易吗?

于 2011-02-17T22:27:22.363 回答
1

从您发布的代码来看,您似乎想要替换网格布局位置中的现有小部件。如果是这种情况,在将新小部件添加到该位置之前,请执行以下操作:

QLayoutItem * existingitem = ui->gridLayout->itemAtPosition(x, y);
if(existingitem) {
    ui->gridLayout->removeItem(existingitem);
    delete existingitem;
}
于 2011-02-17T23:21:52.380 回答