Как мне создать объекты в определенном контейнере в моем главном окне Qt Creator? - PullRequest
1 голос
/ 17 июня 2011

Надеюсь, этот вопрос будет легким.Мне нужно сгенерировать несколько кнопок во время выполнения в определенной области моего графического интерфейса.Объекты, которые я хочу создать, являются флажками.Вот часть кода, которая создает эти флажки:

void MainWindow::on_generateBoxes_clicked()
{
    int x_dim = ui->xDim->value();
    int y_dim = ui->yDim->value();
    int z_dim = ui->zDim->value();
    QVector<QCheckBox*> checkBoxVector;
    for(int i = 0; i < x_dim; ++i){
        for(int j = 0; j < y_dim; ++j){
            checkBoxVector.append(new QCheckBox( ui->dim1 ));
            checkBoxVector.last()->setGeometry(i * 20, j * 20, 20, 20);
        }
    }
}

Мой вопрос: как мне принять эту идею, но создать эти флажки в определенной области, которую я хочу?Область называется dim1 и является виджетом QTabWidget.

РЕДАКТИРОВАТЬ: Обновлен код

Ответы [ 2 ]

2 голосов
/ 18 июня 2011

Трубадур в основном прав, что вам нужно установить правильный виджет в качестве родителя. Хотя QScrollArea по умолчанию не имеет виджета, вам нужно создать его следующим образом:

checkBoxArea = new QScrollArea(this); // this is the MainWindow or other parent
background = new QWidget;
checkBoxArea->setGeometry(0, 0, 200, 200);
checkBoxArea->setWidgetResizable(true); 
checkBoxArea->setWidget(background);
background->show();
for(int i = 0; i < 5; ++i){
    for(int j = 0; j < 5; ++j){
        checkBoxVector.append(new QCheckBox(background));
        checkBoxVector.last()->setGeometry(i * 20, j * 20, 20, 20);
    }
}

важно, чтобы вы использовали checkBoxArea->setWidgetResizable(true), иначе вам придется устанавливать размер вручную каждый раз, когда вы изменяете размер.

Если виджет не отображается там, где вы ожидаете, в большинстве случаев это происходит по одной из следующих причин:

  • неправильный родитель
  • невидимый: используйте show ()
  • нулевой размер: используйте setGeoemetry
0 голосов
/ 17 июня 2011

Вы не хотите ставить флажки в MainWindow, так как тогда их позиции будут относительно этого виджета.Вместо этого вы хотите привязать их к виджету QCsrollArea, то есть

checkBoxVector.append(new QCheckBox(checkBoxArea->widget()));

Я предполагаю, что вы установили виджет на QScrollArea?Если нет, тогда просто используйте простой QWidget то есть

checkBoxArea->setWidget( new QWidget() );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...