Как мне создать матрицу флажков (без текста) в Qt Creator с размерами, указанными во время выполнения? - PullRequest
1 голос
/ 14 июня 2011

Хорошо, этот вопрос немного сложный.В моем главном окне есть раздел, который позволяет пользователю указать размеры x и y, а затем нажать кнопку «Создать».Когда эта кнопка нажата, появится новое окно с сеткой (или матрицей, если вы хотите так назвать) флажков БЕЗ их меток.Сетка имеет размеры, указанные пользователем.Затем пользователь выберет нужные им флажки и нажмет «ОК», после чего данные будут собраны, и всплывающее окно закроется.

В настоящее время у меня правильно открывается окно, но я абсолютно не знаю, как создать эту сетку флажков.Возможно, используя два цикла for?Пожалуйста, предоставьте пример кода создания этих блоков во время выполнения.

Для любопытных это первый шаг графического интерфейса, над которым я работаю, который позволяет пользователю создать домен для вычислительной среды.моделирование динамики.

1 Ответ

3 голосов
/ 14 июня 2011

вы можете сделать это так:

QVector<QCheckBox*> checkBoxVector;
for(int x = 0; x < 12; ++x){
    for(int y = 0; y < 12; ++y){
        checkBoxVector.append(new QCheckBox(this));
        checkBoxVector.last()->setGeometry(x * 20, y * 20, 20, 20);
    }
}

вы хотите сохранить указатели на вновь созданные элементы в некотором классе контейнера, чтобы вы могли использовать их позже (например, чтобы уничтожить их).

Этот пример немного упрощен. Вы должны позаботиться о правильном уничтожении объектов. Использование вектора умных указателей сделало бы этот код более надежным. Хотя в этом случае, поскольку все флажки являются дочерними элементами оконного или родительского виджета (указатель this в моем примере), они будут уничтожены вместе с родительским. Поэтому, пока вы просто показываете их один раз, а затем уничтожаете родителя, вы должны быть в безопасности.

И, конечно, таким образом (только один вектор) вы как-то теряете два измерения сетки. Если вы хотите получить доступ к одному элементу по его позиции, вам придется выполнить несколько простых вычислений с помощью x и y.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...