2016-01-25 1 views
0

Я хочу добавить флажки динамически. Я нашел некоторые полезные ссылки, но у каждого из них есть проблема, которую я не могу решить.Есть ли способ добавить Chekboxes динамически, что я могу получить к ним доступ и их контрольный статус из области определения?

например, в this link мы можем создать & добавить QCheckBox es динамически, но я не могу получить к ним доступ из области определения (для).

И еще один способ использует QListWidgetItem с setCheckState. но у него очень большая проблема! когда я нажимаю на CheckState, он его не замечает и просто фокусируется на предмете, на котором сосредоточено внимание! {В этих ссылок эта проблема не будет введена, но никакого решения: this и this}

Есть ли способ, чтобы добавить Chekboxes динамически, что я могу получить доступ к ним и их CheckState из их области определения?

+0

Вы можете показать код (что вы сделали до сих пор)? – ramtheconqueror

ответ

1

Вам нужно сохранить указатели на создаваемые вами checkbox. Например, добавьте QVector<QCheckBox> checkBoxes; в ваш виджет, а затем добавьте эти указатели в вектор.

код Результат может выглядеть следующим образом:

В заголовке:

YourWidget : public QWidget { 
.... 
QVector<QCheckBox*> checkboxes; 
.... 

И в источнике:

for (int i = 0; i < 5; i++) { 
    QCheckBox *box = new QCheckBox; 
    layout->addWidget(box); 
    checkboxes.append(box); 
} 

Итак, вы можете получить доступ ко ваши Флажки: checkboxes[0]->setChecked(true); или SMTH

И не забудьте освободить память, выделенную для ch eckBoxes в деструкторе вашего виджета (вам не нужно это делать, если вы добавили их в макет)

for (int i = 0; i < checkboxes.size(); i++) { 
    delete checkboxes[i]; 
} 
+1

Вам не нужно удалять объекты в деструкторе. Они автоматически уничтожаются Qt, если вы добавляете их в макет. – thuga

+0

У меня есть 2 ошибки по этому коду! –

+0

in line: checkboxes.append (box); –

Смежные вопросы