2011-02-17 22 views
0

因此,目前我有用C++编写的代码,当从QComboBox中进行选择时,它会创建一些QLabel,QLineEdit和QCheckBox。但是,我希望能够访问我在后面的函数中创建的小部件,以便在从组合框中进行新选择时销毁它们。我可以通过使用设计器来访问创建的对象,通过使用ui->对象,但我无法使用通过使用我自己的代码创建的对象。我能否这样做,因为我知道如何处理这个问题。如何访问Qt中函数中函数中创建的小部件

总之,我希望能够根据用户的选择动态地创建/销毁QWidgets。有没有我应该知道的这样做或任何文档的参考?或者我只是完全走错了这个方向?这里是我的代码目前有用于创建对象:

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); 

    } 

回答

2

如果你给他们的名字(使用setObjectName()),你可以稍后使用QObject::findChildren()找到它们。

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

+0

这是一个想法,但如果我这样做,会有无数的变量。我的意思是,我可以做到这一点,但我不确定这是否是一种好的做法。 – Inanepenguin 2011-02-17 22:42:07

2

那么,你需要从您要访问这些代码的所有部分访问的范围内创建变量。最有可能作为你的窗口类的私有属性。

1

从您发布的代码中,它看起来像要替换网格布局位置中的现有窗口小部件。如果是这样的情况下,添加新的小部件的位置之前做到这一点:

QLayoutItem * existingitem = ui->gridLayout->itemAtPosition(x, y); 
if(existingitem) { 
    ui->gridLayout->removeItem(existingitem); 
    delete existingitem; 
} 
相关问题